You can specify the length of the result using {. on the result. Also, you could use (e.~ i.@(1+>./)) for the obverse monad.
FYI, -- Raul On Wed, Jun 28, 2017 at 4:19 AM, Marshall Lochbaum <mwlochb...@gmail.com> 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