I hear a faint whisper calling me to this dark side...
I have seen these posts[1] when I had just started using J and didn't
understand them. I went down the rabbit hole for a few hours this
morning
The first post in the list was particularly enlightening
NB. was gfy in Dan's post
an=. <@:((,'0') ,&< ])
NB. 2 + i.5
((an 2);'+';(an i. 5);'*:') @. (0 1 2)
2 3 4 5 6
NB. Let's square everything
((an 2);'+';(an i. 5);'*:') @. (3 0 1 2)
4 9 16 25 36
NB. You can even see syntax errors, which can help debugging
((an 2);'+';(an i. 5);'*:') @. (0 1 1 1)
|syntax error
| 2+++
Let's get some more syntax errors:
((an 2);'+';(an i. 5);'*:') @. (3#(3 0 1 2))
|syntax error
| *:*:*:2 2 2+++0 1 2 3 4 0 1 2 3 4 0 1 2 3 4
NB. +: +: +: +: (2+i.5)
((an 2);'+';(an i. 5);'+:') @. ((4#3),(0 1 2))
32 48 64 80 96
NB. adverbs too
('+';'/';(an i.5)) @. (0 1 2)
10
add1=.1&+
((ar 'add1');(an (2 4 6))) @. (0 1)
3 5 7
And then coming back around to my original question:
((ar 'add1');'+:';(an (2 4 6))) @. (0 1 0 2)
7 11 15
versus this monstrosity (beware of linebreaks)
gapply=:([: >@:}. (([: }. >&{.) ; >@:{.@:>@:{. 128!:2 >@:}.)^:({.@:$@:>@:{.))
gapply ('1&+';'+:';'1&+');(2 4 6)
7 11 15
The agenda trick doesn't quite solve the problem though due to train
formation rules:
gapply ('1&+';'+:';'1&+';'1&+');(2 4 6)
8 12 16
((ar 'add1');'+:';(an (2 4 6))) @. (0 1 0 0 2)
9 13 17
You train verb worked well though as an alternative
Thank you!
[1] - http://www.jsoftware.com/pipermail/programming/2013-March/031883.html
[2] - http://www.jsoftware.com/pipermail/programming/2013-January/031236.html
On Thu, Jan 29, 2015 at 5:55 PM, Jose Mario Quintana
<[email protected]> wrote:
> "Is it possible to define f tacitly?"
>
> J tacit programming is Turing complete; thus, any verb can be defined
> tacitly. It can be difficult sometimes but this case is easy... If one is
> prepared to venture to the dark side.
>
>
> an=. <@:((,'0') ,&< ])
>
> NB. Dark side of the force...
>
> Cloak=. ((5!:1)@:<'Cloak')Cloak=. (0:`)(,^:)
> ( train=. (Cloak <'`:')&6 ) NB. `:6 verbalized
> ,^:(0:``:)&6
>
> v=. train@:({.@:(0&({::)) ; an@:>@:{:) f.
>
>
> v (+:`*:;i.5)
> 0 2 4 6 8
>
>
> On Thu, Jan 29, 2015 at 1:20 PM, Joe Bogner <[email protected]> wrote:
>
>> Is it possible to define f tacitly?
>>
>> f=: 3 : '({.@:>@:{.y)`:0 (>@:}.y)'
>> f (+:`*:;i.5)
>>
>> 0 2 4 6 8
>>
>> It's meant to take the first gerund from a box that contains a list of
>> gerunds and data to operate on
>>
>> It's an odd circumstance that needed it. I could probably rework the
>> logic but now I'm curious if it can be done
>>
>> Some things I tried:
>>
>> a=:(+:`*:;i.5)
>>
>> f1=:{.@:>@:{.
>> f1 a
>> ┌──┐
>> │+:│
>> └──┘
>>
>> f2=:>@:}.
>> f2 a
>> 0 1 2 3 4
>>
>>
>> Tried various version of combining f1 and f2 to no avail
>>
>> This works:
>>
>> g`:0 f2 a [ g=. f1 a
>> 0 2 4 6 8
>>
>> I'm thinking there might be a way to do it without the assignment?
>> ----------------------------------------------------------------------
>> 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