f2 =: @.0 2 anV =: <@:((,'0') ,&< ]) +:`*:`(anV i.5) f2 0 2 4 6 8
+/`*:`(anV i.5) f2 10 ----- Original Message ----- From: Jose Mario Quintana <[email protected]> To: Programming forum <[email protected]> Cc: Sent: Tuesday, February 3, 2015 7:13 PM Subject: Re: [Jprogramming] conjunction in tacit verb A test of the tacit solutions provided so far follows, NB. f0, my version... an=. <@:((,'0') ,&< ]) Cloak=. ((5!:1)@:<'Cloak')Cloak=. (0:`)(,^:) train=. (Cloak <'`:')&6 NB. `:6 verbalized ( f0=. train@:({.@:(0&({::)) ; an@:>@:{:) f. ) ,^:(0:``:)&6@:({.@:(0&({::)) ; <@:((,'0') ,&< ])@:>@:{:) NB. f1, Raul's version fe=: 13 : 0 '0:';<'@:';<((0;0){::y);<(,'"');<((,'0');1{::y);<((,'0');_) ) ( f1=. ]^:] fe f. ) ]^:] ('0:' ; [: < '@:' ; [: < ((0;0) {:: ]) ; [: < (,'"') ; [: < (<(,'0');_) ;~ (,'0') ; 1 {:: ]) NB. f2, Pascal's version... Pascal, if you are listening, I had problems collecting the definitions to produce your tacit solution. Can you do the honors? NB. f3, Linda's version... ( f3=: 13 :'".(>0{>0{y),":i.$>1{y' ) [: ". ([: > 0 { [: > 0 { ]) , [: ": [: i. [: $ [: > 1 { ] ( Y=. +:`*:;i.5 ) NB. Original sample data ┌───────┬─────────┐ │┌──┬──┐│0 1 2 3 4│ ││+:│*:││ │ │└──┴──┘│ │ └───────┴─────────┘ f0 Y 0 2 4 6 8 f1 Y 0 2 4 6 8 f3 Y 0 2 4 6 8 ( Y=. (+/)`*:;i.5 ) ┌────────────┬─────────┐ │┌───────┬──┐│0 1 2 3 4│ ││┌─┬───┐│*:││ │ │││/│┌─┐││ ││ │ │││ ││+│││ ││ │ │││ │└─┘││ ││ │ ││└─┴───┘│ ││ │ │└───────┴──┘│ │ └────────────┴─────────┘ f0 Y 10 f1 Y 10 f3 Y |domain error: f3 | f3 Y |[-0] ( Y=. (+:&>`*:;<5;6) ) ┌───────────────┬─────┐ │┌──────────┬──┐│┌─┬─┐│ ││┌─┬──────┐│*:│││5│6││ │││&│┌──┬─┐││ ││└─┴─┘│ │││ ││+:│>│││ ││ │ │││ │└──┴─┘││ ││ │ ││└─┴──────┘│ ││ │ │└──────────┴──┘│ │ └───────────────┴─────┘ f0 Y 10 12 f1 Y |length error: f1 | f1 Y |[-3] f3 Y |domain error: f3 | f3 Y |[-0] On Mon, Feb 2, 2015 at 1:23 AM, 'Pascal Jasmin' via Programming < [email protected]> wrote: > a 3rd tacit (and some "almost tacit") version > > anV =: <@:((,'0') ,&< ]) NB. your an > an =: 1 : '<@:((,''0'') ,&< ]) m' NB. as adverb > w =: @.0 2 NB. result of 0 2 agenda > c2da =: 1 : ( 'a =. (m ,'' u'') label_. 1 : (''u 1 :'' , quote a)') > tie =. '`'c2da > > JVERSION > Engine: j701/2011-01-10/11:25 > Library: 8.02.07 > Qt IDE: 1.1.2/5.3.0 > Platform: Win 64 > > > 1000 st every '+:*:(anV i.5) tie tie 0 2 agenda';'u +:`*:;i.5';'(+:`*: , ( > anV i.5) ) w';'(+:`*: , (i.5) an) w' > > ┌────────────────────────────────┬─────┬──────────┬─────────┐ > │+:*:(anV i.5) tie tie 0 2 agenda│13696│3.08835e_5│0.422981 │ > ├────────────────────────────────┼─────┼──────────┼─────────┤ > │u +:`*:;i.5 │6656 │1.64672e_5│0.109606 │ > ├────────────────────────────────┼─────┼──────────┼─────────┤ > │(+:`*: , ( anV i.5) ) w │4608 │4.70272e_6│0.0216701│ > ├────────────────────────────────┼─────┼──────────┼─────────┤ > │(+:`*: , (i.5) an) w │5888 │7.76736e_6│0.0457342│ > └────────────────────────────────┴─────┴──────────┴─────────┘ > > > > ________________________________ > From: Jose Mario Quintana <[email protected]> > To: Programming forum <[email protected]> > Sent: Sunday, February 1, 2015 11:16 PM > Subject: Re: [Jprogramming] conjunction in tacit verb > > > So far two main tacit solutions have been shown. The first, bending the > rules, > > an=. <@:((,'0') ,&< ]) > Cloak=. ((5!:1)@:<'Cloak')Cloak=. (0:`)(,^:) > train=. (Cloak <'`:')&6 NB. `:6 verbalized > > ( v=. train@:({.@:(0&({::)) ; an@:>@:{:) f. ) > ,^:(0:``:)&6@:({.@:(0&({::)) ; <@:((,'0') ,&< ])@:>@:{:) > > The second, following the rules, > > fe=: 13 : 0 > '0:';<'@:';<((0;0){::y);<(,'"');<((,'0');1{::y);<((,'0');_) > ) > > ( u=. ]^:] fe f. ) > ]^:] ('0:' ; [: < '@:' ; [: < ((0;0) {:: ]) ; [: < (,'"') ; [: < > (<(,'0');_) ;~ (,'0') ; 1 {:: ]) > > Let us compare them, > > Y=. +:`*:;i.5 > > (u -: v) Y > 1 > > sp=. 7!:5@:< > sp&> ;:'u v' > 2432 1920 > > st=. (, */&.:>@:(1 2&{))@:(] ; 7!:2@:] ; 6!:2) > 10000 st&> 'u Y' ; 'v Y' > ┌───┬────┬──────────┬──────────┐ > │u Y│2624│1.49229e_5│0.0391576 │ > ├───┼────┼──────────┼──────────┤ > │v Y│1920│4.96943e_6│0.00954131│ > └───┴────┴──────────┴──────────┘ > > By the way, Patriots 28 Seahawks 24, a fine example that bending the rules > pays off ;) > > > > > > On Sun, Feb 1, 2015 at 4:07 PM, Jose Mario Quintana < > [email protected]> wrote: > > > "Or, you can use ]^:]" > > > > Sneaky? (See, > > http://www.jsoftware.com/pipermail/programming/2013-January/031234.html > > and > > http://www.jsoftware.com/pipermail/programming/2013-January/031236.html > > ) > > > > " > > But maybe it's also easy enough to use J's parser and not bother with > > tacit for this kind of exercise? > > " > > > > Maybe, but the question that started this thread was, > > "Is it possible to define f tacitly?" > > > > > > > > On Sun, Feb 1, 2015 at 3:38 PM, Raul Miller <[email protected]> > wrote: > > > >> Or, you can use ]^:] > >> > >> It's not really that hard. > >> > >> http://www.jsoftware.com/help/dictionary/d202n.htm says: > >> > >> u^:( v1`v2)y ↔ u^:(v1 y) (v2 y) > >> > >> So let's make v1 be 0: and v2 be a data structure which represents our > >> entire calculation: > >> > >> ]^:] 0:`(+:@:(0 1 2 3 4"_)) > >> 0 2 4 6 8 > >> > >> Now all we need is a verb which transforms > >> (+:`*:;i.5) > >> to > >> 0:`(+:@:(0 1 2 3 4"_)) > >> > >> It's straightfoward to do this explicitly. > >> > >> Let's define a test: > >> > >> ex=: +:`*:;i.5 > >> assert 0:`(+:@:(0 1 2 3 4"_)) -: fe ex > >> > >> Now we just need to define fe so that the above script does not throw > >> an error. So take a look at what 0:`(+:@:(0 1 2 3 4"_)) looks like and > >> transcribe that to code: > >> > >> fe=:3 :0 > >> '0:';<'@:';<((0;0){::y);<(,'"');<((,'0');1{::y);<((,'0');_) > >> ) > >> > >> Testing: > >> > >> ]^:] fe ex > >> 0 2 4 6 8 > >> > >> Now.. that expression for fe is messy, and a little tedious to write, > >> but if you don't mind a little bit of trial and error and > >> investigation while you work through whatever uncertainties you have > >> about what you are seeing, you can do it. > >> > >> And converting it to tacit can be done like this: > >> > >> fe=:13 :0 > >> '0:';<'@:';<((0;0){::y);<(,'"');<((,'0');1{::y);<((,'0');_) > >> ) > >> > >> (And then look at the definition of fe using linear representation.) > >> > >> Oh, but that's cheating! > >> > >> Um... why? > >> > >> It's not, not really. You learn from whatever interests you. > >> > >> That said, it *can* be an interesting exercise to construct sensibly > >> named concepts for building that kind of data structure. > >> > >> But maybe it's also easy enough to use J's parser and not bother with > >> tacit for this kind of exercise? > >> > >> Thanks, > >> > >> -- > >> Raul > >> > >> > >> On Sun, Feb 1, 2015 at 3:09 PM, Jose Mario Quintana > >> <[email protected]> wrote: > >> > " > >> > The agenda trick doesn't quite solve the problem though due to train > >> > formation rules: > >> > " > >> > > >> > Actually, when evaluating atomic representations, gerunds, etc. > whatever > >> > one can accomplish using train (`:6) one can accomplish it using > agenda > >> > (@.) as well (and vice versa). > >> > > >> > JVERSION > >> > Installer: j602a_win.exe > >> > Engine: j701/2011-01-10/11:25 > >> > Library: 6.02.023 > >> > > >> > ( agenda=. Cloak <'@.' ) NB. @. verbalized > >> > ,^:(0:`@.) > >> > > >> > u=. agenda&0 1@:({.@:(0&({::)) ; an@:>@:{:) f. > >> > u (+:`*:;i.5) > >> > 0 2 4 6 8 > >> > > >> > Alternatively, > >> > > >> > caravan=. agenda&0@:< > >> > > >> > u=. caravan@:({.@:(0&({::)) ; an@:>@:{:) f. > >> > u (+:`*:;i.5) > >> > 0 2 4 6 8 > >> > > >> > I find train more intuitive but agenda more suitable for heavy duty. > >> > > >> > > >> > On Fri, Jan 30, 2015 at 9:30 AM, Joe Bogner <[email protected]> > >> wrote: > >> > > >> >> 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 > >> >> > >> > ---------------------------------------------------------------------- > >> > 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 > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
