Oops, here's a fix for that corner case in my version:

   Iinv=: (e.~ i.@(1+>./@,&0))

Thanks,

-- 
Raul

On Wed, Jun 28, 2017 at 8:00 PM, 'Pascal Jasmin' via Programming
<[email protected]> wrote:
> The discussion you linked to devolved into, "but it will cut off original 
> length, so not a real inverse"
> there was also the corner case of i.0 (potential result of I.), fixed imo 
> with:
> (#/.~@])`(~.@])`(0#~>:@(>./)@])}~`0:@.(0 = #) i.0
> 0
>
> But, something that didn't come up in the thread is the easily invertible,
>    (I. , #) 0 0 0
> 3
>    (I. , #) 0 0 0 1
> 3 4
>
> as a non lossy conversion of indexes and boolean arrays.  Though I support 
> the idea of raw I. inverse being defined.
> Your verb seems to take great care to check for duplicates, and deal with an 
> unsorted list of indexes.  Is it worth considering:
>    1:`]`(0#~ >:@{:@])}~ 2 4
> 0 0 1 0 1
>    1:`]`(0#~ >:@{:@])}~ i.0
> 0
>
> and then do /:~@:~. on input if it may not be sorted unique?
>
> ________________________________
> On Wednesday, June 28, 2017, 4:21:03 AM EDT, Marshall Lochbaum 
> <[email protected]> wrote:
>
>
> All (I.)s used in my post refer to the monad. I meant that the monadic
> verb given by binding my dyadic verb to a left argument (which must be
> (i.n) for a large enough n) is a mostly-inverse to (I.). It's probably
> best to ignore my informal discussion if you plan on implementing this.
> There's a forum discussion starting at
> http://www.jsoftware.com/pipermail/general/2006-April/026874.html
> and I remember but can't find a more recent one that hit most of the
> same points.
>
> Your verb is the right approach except that you've forgotten that monad
> u`v`w} doesn't work the way you want it to; the correct implementation
> is regrettably
> (#/.~@])`(~.@])`(0#~>:@(>./)@])}~
>
> Adding the above as an inverse to I. is very easy, but it would also be
> valuable to be able to specify the length of the result. There are some
> suggestions in this thread, which I haven't read fully. Allowing the fit
> conjunction to apply to a derived verb would probably be difficult.
> http://www.jsoftware.com/pipermail/programming/2010-September/020281.html
> (I'm kind of surprised I remembered to look for this thread at all,
> given that I state in it that I'm a Windows user!)
>
> Marshall
>
> On Tue, Jun 27, 2017 at 07:02:59PM -0400, Henry Rich wrote:
>> I see how (#/.~@])`(~.@])`[}is an inverse of monad I., but I don't see
>> how it is a left inverse of (presumably dyad) I. .  Please explain.
>>
>> Also, it would be a problem to have a dyadic inverse of a monad, no?
>> Duals wouldn't work.  Changing the suggestion to
>>
>> (#/.~)`~.`(0#~>:@(>./))}
>>
>> would address that.
>>
>> Henry Rich
>>
>>
>> > An efficient way to turn a list of intervals into a list of
>> > number-of-intervals-containing uses an obverse of monad (I.), which I am
>> > increasingly coming to believe is a major feature missing from J. To
>> > wit:
>> >
>> >    x =. 4 7 2 4 1 7 8
>> >    (10$0) (#/.~@])`(~.@])`[}"1 x
>> > 0 1 1 0 2 0 0 2 1 0
>> >    I. (10$0) (#/.~@])`(~.@])`[}"1 x
>> > 1 2 4 4 7 7 8
>> >    (/:~x) -: I. (10$0) (#/.~@])`(~.@])`[}"1 x
>> > 1
>> >
>> > The verb ((#/.~@])`(~.@])`[}) with an appropriate left argument is an
>> > left inverse to I. ignoring trailing zeros, and a right inverse to I.
>> > ignoring ordering. It counts, for each number in (i.n) where n is the
>> > length of the left argument, how many elements on the right are equal to
>> > it. To get our interval count, we just take this count for the starts of
>> > intervals, subtract the counts for ends of intervals, and do a running
>> > sum:
>> >
>>
>>
>>
>> ---
>> This email has been checked for viruses by AVG.
>> http://www.avg.com
>>
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to