Only an incremental improvement, but taking out the gerund from the train, one can use this as a general purpose tool, independent from the monads to execute and the data:
invoke =: 4 :'x`:0 y' monex =: ($~$) invoke"0 ] +:`-: monex 4 2 1 6 8 1 2 3 *:`%: monex i. 5 0 1 4 1.73205 16 2015-08-09 6:45 GMT+02:00, 'Pascal Jasmin' via Programming <[email protected]>: > cool. to do what I was going for, > > (invoke"_1~ +:`-: $~ #) i. 3 3 > 0 2 4 > 1.5 2 2.5 > 12 14 16 > > in strand notation > > lrS =: 'lrT {."1 v2a' aatrain > > 9: -: +: lrS > ┌────┬────┐ > │(-:)│(+:)│ > └────┴────┘ > > > (apply every~ 9: *: +: -: lrS $~ #) 3 2 5 4 > 9 4 2.5 16 > > > > > ----- Original Message ----- > From: Raul Miller <[email protected]> > To: Programming forum <[email protected]> > Cc: > Sent: Saturday, August 8, 2015 11:39 PM > Subject: Re: [Jprogramming] a trick for monadic gerund and / > > Another approach: > > (apply each~ +:`-: $~ $) 4 2 3 0 > ┌─┬─┬─┬─┐ > │8│1│6│0│ > └─┴─┴─┴─┘ > > Except apply isn't quite right, since it's looking for a string > representing a verb and it's not always the case that the part of the > gerund inside the box is a string representing a verb. > > So, perhaps better: > > invoke=:4 :'x`:0 y' > (invoke"0~ +:`-: $~ $) 4 2 3 0 > 8 1 6 0 > > Good enough? > > Thanks, > > -- > Raul > > > On Sat, Aug 8, 2015 at 8:12 PM, 'Pascal Jasmin' via Programming > <[email protected]> wrote: >> -`+/ will insert alternating - then + between items of argument. Those >> are dyadic verbs, and they have to be. >> >> Still the idea of applying monads to alternating items in a list must have >> occurred to others too. One technique is: >> >> ('+:';'-:') apply each 4 2 >> ┌─┬─┐ >> │8│1│ >> └─┴─┘ >> >> but this doesn't have the auto expansion that gerunds and / have. A >> solution >> >> (] ,~ -:@:[)`(] ,~ +:@:[)/ 3 4 2 0 >> 1.5 8 1 0 >> >> >> where the trailing 0 is a pad that doesn't get processed. >> >> With my version of strand notation and double adverbs at >> http://www.jsoftware.com/jwiki/PascalJasmin/functional%20algebra%20and%20double%20adverbs%20part%202 >> >> This can be made into a clean adverb that adds its own pad, and then >> removes the pad after processing. (needs many definitions from that page). >> all one line. >> >> altMs =: 'lrT (''[: }: [:''&,)@:(,&''/ {:,~]'')@:(''`''&joinstring)@:(([: >> ''(] ,~''&, ,&''@:[)'' )each) @:( {."1) v2a eval' aatrain >> >> 9: -: +: altMs NB. 9: closes strand input >> [: }: [: (] ,~ -:@:[)`(] ,~ +:@:[)`:3 {: ,~ ] >> >> >> 9: -: +: altMs 3 4 5 6 NB. verbs get inserted left to right >> 1.5 8 2.5 12 >> >> >> 9: -: +: *: altMs 3 4 5 6 7 >> 1.5 8 25 3 14 >> >> >> 9: *: (-: +: altMs) NB. expression in brackets is assignable adverb >> [: }: [: (] ,~ *:@:[)`(] ,~ -:@:[)`(] ,~ +:@:[)`:3 {: ,~ ] >> ---------------------------------------------------------------------- >> 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
