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

Reply via email to