Actually, I my mind I thought it was from left to right but the exercise is
from right to left.  So,

   ce=. &([ train@:, an@:]) NB. It is even easier than I thought!

   0 0$(19$E`O)ce 100
98
97
95
94
92
91
89
88
86
85
83
82
80
79
77
76
74
73
71

For (19$E`O) it makes no difference since it is a palindrome,

   (] -: |.) 19$E`O
1




On Mon, Jul 13, 2015 at 5:29 PM, Jose Mario Quintana <
[email protected]> wrote:

> A non-trivial meta-programming exercise?  That is a cheating opportunity :)
>
>    train=. (<'`:')(0:`)(,^:)&6  NB. Usual definition
>    an=. <@:((":0) ,&< ])        NB. Usual definition
>
>    ce=. &(|.@:[ train@:, an@:]) NB. Actual coding for this exercise
> (maybe it was trivial after all)
>
>    0 0$(19$E`O)ce 100
> 98
> 97
> 95
> 94
> 92
> 91
> 89
> 88
> 86
> 85
> 83
> 82
> 80
> 79
> 77
> 76
> 74
> 73
> 71
>
> On Mon, Jul 13, 2015 at 1:16 PM, Raul Miller <[email protected]>
> wrote:
>
>> Actually, thinking about this, it would be nice to have an adverb
>> which worked something like `:6 but which gave the effect of running
>> the gerunds in sequence (from right to left). That way, I could
>> encapsulate the details of how this to encode the train and then
>> ignore those details after that.
>>
>> In other words, something like this:
>>
>> concatevoke=:1 :0
>>   fill=. {.[:`]
>>   (({:m),~_1|.1j1 #!.fill }:m)`:6
>> )
>>
>>    0 0$(19$E`O) concatevoke 100
>> 98
>> 97
>> 95
>> 94
>> 92
>> 91
>> 89
>> 88
>> 86
>> 85
>> 83
>> 82
>> 80
>> 79
>> 77
>> 76
>> 74
>> 73
>> 71
>>
>> I'm not sure if there's a more elegant way of phrasing concatevoke.
>> But it gets the job done. Heres a shorter view of what it does
>> (shortened to avoid email line wrap problems). I have also swapped E
>> and O, just because:
>>
>>    (9$O`E) concatevoke
>> [: O [: E [: O [: E [: O [: E [: O [: E O
>>
>> Thanks,
>>
>> --
>> Raul
>>
>> On Mon, Jul 13, 2015 at 1:01 PM, Raul Miller <[email protected]>
>> wrote:
>> > This is not a good candidate for the power conjunction.
>> >
>> > You could do it with the power conjunction but it's not a good fit.
>> >
>> > The reasons for this are:
>> >
>> > (1) You have two independent values you are working with - the value
>> > you use for flow control is independent of the value you are passing
>> > to your functions e and o
>> >
>> > (2) The expression itself produces no useful result.
>> >
>> > So this means that at every step of the way you are working against
>> > the design of the power conjunction. There is no elegance to be had,
>> > and probably a better approach would be to indent your explicit
>> > definition.
>> >
>> > t =. monad define
>> >   n =. 20
>> >   while. n =. n - 1 do.
>> >     if. 2|n do. smoutput y =. e y
>> >     else. smoutput y =. o y
>> >     end.
>> >   end.
>> > )
>> >
>> > That said, a if you wanted to rephrase this tacitly, here are the
>> > steps I would take:
>> >
>> > First, since you really want the side effects, define variations on e
>> > and o which display their result:
>> >
>> >    E=:1!:2&2@e
>> >    O=:1!:2&2@o
>> >
>> > Second, looking at your implementation of t, you have a total of 19
>> > times through the loop. You have 10 'e' invocations and 9 'o'
>> > invocations. So I'd set this up as a train:
>> >
>> >    (36$[:`E`[:`O)`E`:6
>> >
>> > But, also, your result is the result that smoutput would produce, so:
>> >
>> >    T=: 0 0 $ (36$[:`E`[:`O)`E`:6
>> >    T 100
>> > 98
>> > 97
>> > 95
>> > 94
>> > 92
>> > 91
>> > 89
>> > 88
>> > 86
>> > 85
>> > 83
>> > 82
>> > 80
>> > 79
>> > 77
>> > 76
>> > 74
>> > 73
>> > 71
>> >
>> > Good enough?
>> >
>> > Well, maybe not... since your 'e' happens for the odd values of N, and
>> > your 'o' happens for the even instances, I'd be tempted to rename
>> > them.
>> >
>> > Thanks,
>> >
>> > --
>> > Raul
>> >
>> >
>> > On Mon, Jul 13, 2015 at 12:39 PM, Brian Schott <[email protected]>
>> wrote:
>> >> I have the following verb t and wonder if anyone would like to show
>> how it
>> >> could be more elegantly defined (using the Power conjunction?) I would
>> >> enjoy learning your result.
>> >>
>> >> The intent of t is to alternatively subtract 1 or 2 from a positive
>> number
>> >> showing the intermediate results of say n=20 subtractions.
>> >>
>> >>
>> >>    e =. -&2
>> >>    o =. -&1
>> >>
>> >>    t =. monad define
>> >> n =. 20
>> >> while. n =. n - 1 do.
>> >> if. 2|n do. smoutput y =. e y
>> >> else. smoutput y =. o y
>> >> end.
>> >> end.
>> >> )
>> >>    t 100
>> >> 98
>> >> 97
>> >> 95
>> >> 94
>> >> 92
>> >> 91
>> >> 89
>> >> 88
>> >> 86
>> >> 85
>> >> 83
>> >> 82
>> >> 80
>> >> 79
>> >> 77
>> >> 76
>> >> 74
>> >> 73
>> >> 71
>> >>
>> >>
>> >> --
>> >> (B=)
>> >> ----------------------------------------------------------------------
>> >> 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