Also straightforward would be this adverb. lambda= 3 :
This expects a formatted sequence of characters as its argument, but it's quite a robust (and well documented) implementation. Thanks, -- Raul On Thu, Dec 10, 2015 at 2:21 PM, Jose Mario Quintana <jose.mario.quint...@gmail.com> wrote: > I would rather use strand notation (a multiple adverb). Using Jx and the > adverb lambda mentioned in [0] is straightforward: > > sf=. [: u0 u1 u2 (u0@[ u1 u2@]) lambda > +: + -:sf > +:@[ + -:@] > > 3 4 +: + -:sf 2 4 > 7 10 > > type'sf' > ┌──────┐ > │adverb│ > └──────┘ > > [0] [Jprogramming] Can whatever be written tacitly? > http://www.jsoftware.com/pipermail/programming/2015-February/041130.html > > > > > > On Thu, Dec 10, 2015 at 1:58 PM, Joe Bogner <joebog...@gmail.com> wrote: > >> Oh, that is clever but not too mysterious. I also went down the path >> of trying to get the linear representation of u but got stuck because >> 5!:5 expects a name. I didn't think to assign a local name. >> >> This was also cool and the piece I was missing to gerundify u >> >> (+: + -:) (1 : '0{:: u`[') >> ┌─┬─────────┐ >> │3│┌──┬─┬──┐│ >> │ ││+:│+│-:││ >> │ │└──┴─┴──┘│ >> └─┴─────────┘ >> >> >> >> Thanks >> >> On Thu, Dec 10, 2015 at 1:35 PM, Raul Miller <rauldmil...@gmail.com> >> wrote: >> > Here's a draft implementation of what I think you mean by a "smart fork": >> > >> > NB. draft >> > sfork=:1 :0 >> > impl=. 0 {:: u`- >> > if. (<,'3')-:{.impl do. >> > d=. 5!:1@< >> > e=. 5!:0 >> > '`a b c'=. 1 {:: impl >> > (d'a')e@[ (d'b')e (d'c')e@] >> > end. >> > ) >> > >> > Example use: >> > (+-*)sfork >> > +@[ - *@] >> > >> > Hopefully that's not too mysterious? >> > >> > Basically, it's taking the gerund of its argument (which it assumes is >> > a verb or an atomic representation of a verb), and if that represents >> > a fork, it's extracting the three verbs from the fork and slapping a >> > @[ on the left tine and a @] on the right tine. >> > >> > Anyways, I've occasionally also itched for something like this. But >> > the definition is big enough that I never bother. >> > >> > Thanks, >> > >> > -- >> > Raul >> > >> > >> > On Thu, Dec 10, 2015 at 1:15 PM, Joe Bogner <joebog...@gmail.com> wrote: >> >> Interesting. I'm not sure if M is worth it over @] due to potential >> >> naming conflicts and ambiguity in the code .@] is very clear >> >> >> >> It got me thinking that it might be interesting (albeit probably not >> >> overly useful) to have a 'smart fork' adverb that could figure out >> >> that its arguments are monadic and bind them appropriately >> >> >> >> This starts to show what I mean >> >> fork=:(2 : 'u@[ + v@]') >> >> >> >> 3 4 (+: fork -:) 2 4 >> >> 7 10 >> >> >> >> The + would need to be extracted, so it would need to be >> >> >> >> 3 4 (+: + -:) fork 2 4 >> >> >> >> I don't think that's possible without using gerunds.. >> >> >> >> fork=: (1 :'(0{:: u);''@'';''['';(1&{::u);(2{:: u);''@'';'']''') (1 : >> 'u `:6') >> >> >> >> +:`+`-: fork >> >> +:@[ + -:@] >> >> >> >> 3 4 +:`+`-: fork 2 4 >> >> 7 10 >> >> >> >> fork could be enhanced to detect whether the tines are monadic and >> >> only apply the @[ and @] if so >> >> >> >> not sure how useful it is, but fun to play with >> >> >> >> >> >> >> >> >> >> On Thu, Dec 10, 2015 at 12:11 PM, 'Pascal Jasmin' via Programming >> >> <programm...@jsoftware.com> wrote: >> >>> Here is another approach to simplifying J and meeting dyadic J goals >> without verb definitions: >> >>> >> >>> M =: @] >> >>> >> >>> >> >>> 3 4 (+:M~ + -:M) 2 4 >> >>> 7 10 >> >>> (+: M~ + -: M) 2 4 >> >>> 5 10 >> >>> >> >>> >> >>> >> >>> ~ (swap) basically works like @[ on a monad that is defined to ignore >> x rather than return error. >> >>> >> >>> M or M~ is easier to type than @:] or @:[ too. >> >>> >> >>> >> >>> T =: &{(>@) >> >>> NB. double adverb version of @: >> >>> at =: 1 : 'u 1 :''2 : ''''u (v@:) '''' u''' >> >>> >> >>> >> >>> >> >>> >> >>> 3 2 (1 T M~ + 0 1 T M +: at) 2 3 4 >> >>> 6 8 >> >>> >> >>> ----- Original Message ----- >> >>> From: Jose Mario Quintana <jose.mario.quint...@gmail.com> >> >>> To: Programming forum <programm...@jsoftware.com> >> >>> Sent: Thursday, December 3, 2015 11:04 AM >> >>> Subject: Re: [Jprogramming] dyadic J >> >>> >> >>> Pascal wrote: >> >>> >> >>> "There is a addon called general/primitives that provides shadow names >> for >> >>> everything." >> >>> >> >>> However, trying to provide a shadow name for $: is futile. >> >>> >> >>> >> >>> Pascal wrote: >> >>> >> >>> 'A recent point of conversion of mine is that u@:v is both easier to >> read >> >>> and edit/expand and easier to see subresults by cutting out parts of >> an @ >> >>> train "s@t@u@v" even if its u@:(v) compared to [: u v.' >> >>> >> >>> Welcome to a very exclusive club ;) >> >>> >> >>> >> >>> Linda wrote: >> >>> " >> >>> Pascal and others. I am curious to know if you find tacit code easy to >> read. >> >>> >> >>> cr=:([ = [: +/ [: |: #~ #: [: i. ^) #"2 #~ #: [: i. ^ >> >>> divy=:([: ,. [: <"1 '*' $~ ] ,~ [: <. %) , [: < '*' $~ [ - ] * [: <. % >> >>> >> >>> Those two tacit lines seem hard to translate for me. Instead I find the >> >>> expressions below are quite easy to follow. >> >>> >> >>> cr=: 13 :'(x= +/ |:(y#x)#:i.x^y) #"2 (y#x)#:i.x^y' >> >>> divy=: 13 :'(,.<"1((<.x%y),y)$''*''),<(x-y*<.x%y)$''*''' >> >>> " >> >>> >> >>> I submit that it is a matter of familiarity. Granted, forum members >> are >> >>> likely more familiar with explicit rather than tacit reading and >> writing >> >>> (then again, most programmers are more familiar with one element at a >> time >> >>> as opposed to array processing). >> >>> >> >>> Personally, armed with the boxed representation of a verb, I can >> typically >> >>> see effortlessly how the data flows given a tacit verb and its >> >>> argument(s). This does not surprise me since the interpreter’s >> >>> representation of a verb is closely related to the boxed >> representation (if >> >>> I recall correctly). >> >>> >> >>> Moreover, tacit forms facilitate the manual, or automatic, symbolic >> >>> manipulation and simplification of tacit forms. For example, >> >>> >> >>> cr=:([ = [: +/ [: |: #~ #: [: i. ^) #"2 #~ #: [: i. ^ >> >>> >> >>> cr >> >>> ([ = [: +/ [: |: #~ #: [: i. ^) #"2 #~ #: [: i. ^ >> >>> >> ┌─────────────────────────────────────────────┬───────┬────────────────────┐ >> >>> >> │┌─┬─┬───────────────────────────────────────┐│┌─┬─┬─┐│┌─────┬──┬─────────┐│ >> >>> >> ││[│=│┌──┬─────┬────────────────────────────┐│││#│"│2│││┌─┬─┐│#:│┌──┬──┬─┐││ >> >>> ││ │ ││[:│┌─┬─┐│┌──┬──┬────────────────────┐│││└─┴─┴─┘│││#│~││ >> ││[:│i.│^│││ >> >>> ││ │ ││ ││+│/│││[:│|:│┌─────┬──┬─────────┐││││ ││└─┴─┘│ >> │└──┴──┴─┘││ >> >>> ││ │ ││ │└─┴─┘││ │ ││┌─┬─┐│#:│┌──┬──┬─┐│││││ >> │└─────┴──┴─────────┘│ >> >>> ││ │ ││ │ ││ │ │││#│~││ ││[:│i.│^││││││ │ >> │ >> >>> ││ │ ││ │ ││ │ ││└─┴─┘│ │└──┴──┴─┘│││││ │ >> │ >> >>> ││ │ ││ │ ││ │ │└─────┴──┴─────────┘││││ │ >> │ >> >>> ││ │ ││ │ │└──┴──┴────────────────────┘│││ │ >> │ >> >>> ││ │ │└──┴─────┴────────────────────────────┘││ │ >> │ >> >>> │└─┴─┴───────────────────────────────────────┘│ │ >> │ >> >>> >> └─────────────────────────────────────────────┴───────┴────────────────────┘ >> >>> >> >>> NB. Regardless of the nature of the arguments... >> >>> >> >>> NB. Automatically, >> >>> >> >>> cr f. decap ala NB. Wicked Jx adverbs for decapitating and >> associating >> >>> @:s to the left >> >>> ([ = +/@:|:@:(#~ #: i.@:^)) #"2 #~ #: i.@:^ >> >>> >> ┌─────────────────────────────────────────────┬───────┬────────────────────┐ >> >>> >> │┌─┬─┬───────────────────────────────────────┐│┌─┬─┬─┐│┌─────┬──┬─────────┐│ >> >>> >> ││[│=│┌─────────────┬──┬────────────────────┐│││#│"│2│││┌─┬─┐│#:│┌──┬──┬─┐││ >> >>> ││ │ ││┌─────┬──┬──┐│@:│┌─────┬──┬─────────┐│││└─┴─┴─┘│││#│~││ >> ││i.│@:│^│││ >> >>> ││ │ │││┌─┬─┐│@:│|:││ ││┌─┬─┐│#:│┌──┬──┬─┐││││ ││└─┴─┘│ >> │└──┴──┴─┘││ >> >>> ││ │ ││││+│/││ │ ││ │││#│~││ ││i.│@:│^│││││ >> │└─────┴──┴─────────┘│ >> >>> ││ │ │││└─┴─┘│ │ ││ ││└─┴─┘│ │└──┴──┴─┘││││ │ >> │ >> >>> ││ │ ││└─────┴──┴──┘│ │└─────┴──┴─────────┘│││ │ >> │ >> >>> ││ │ │└─────────────┴──┴────────────────────┘││ │ >> │ >> >>> │└─┴─┴───────────────────────────────────────┘│ │ >> │ >> >>> >> └─────────────────────────────────────────────┴───────┴────────────────────┘ >> >>> >> >>> NB. Manually, >> >>> >> >>> [ (([ = +/@:|:@:]) #"2 ]) #~ #: i.@:^ NB. Distributing (#~ #: i.@ >> :^) >> >>> [ (([ = +/@:|:@:]) #"2 ]) #~ #: i.@:^ >> >>> ┌─┬──────────────────────────────────────┬────────────────────┐ >> >>> │[│┌──────────────────────────┬───────┬─┐│┌─────┬──┬─────────┐│ >> >>> │ ││┌─┬─┬────────────────────┐│┌─┬─┬─┐│]│││┌─┬─┐│#:│┌──┬──┬─┐││ >> >>> │ │││[│=│┌─────────────┬──┬─┐│││#│"│2││ ││││#│~││ ││i.│@:│^│││ >> >>> │ │││ │ ││┌─────┬──┬──┐│@:│]│││└─┴─┴─┘│ │││└─┴─┘│ │└──┴──┴─┘││ >> >>> │ │││ │ │││┌─┬─┐│@:│|:││ │ │││ │ ││└─────┴──┴─────────┘│ >> >>> │ │││ │ ││││+│/││ │ ││ │ │││ │ ││ │ >> >>> │ │││ │ │││└─┴─┘│ │ ││ │ │││ │ ││ │ >> >>> │ │││ │ ││└─────┴──┴──┘│ │ │││ │ ││ │ >> >>> │ │││ │ │└─────────────┴──┴─┘││ │ ││ │ >> >>> │ ││└─┴─┴────────────────────┘│ │ ││ │ >> >>> │ │└──────────────────────────┴───────┴─┘│ │ >> >>> └─┴──────────────────────────────────────┴────────────────────┘ >> >>> >> >>> [ (( = +/@:|: ) #"2 ]) #~ #: i.@:^ NB. Hook form >> >>> [ ((= +/@:|:) #"2 ]) #~ #: i.@:^ >> >>> ┌─┬─────────────────────────────┬────────────────────┐ >> >>> │[│┌─────────────────┬───────┬─┐│┌─────┬──┬─────────┐│ >> >>> │ ││┌─┬─────────────┐│┌─┬─┬─┐│]│││┌─┬─┐│#:│┌──┬──┬─┐││ >> >>> │ │││=│┌─────┬──┬──┐│││#│"│2││ ││││#│~││ ││i.│@:│^│││ >> >>> │ │││ ││┌─┬─┐│@:│|:│││└─┴─┴─┘│ │││└─┴─┘│ │└──┴──┴─┘││ >> >>> │ │││ │││+│/││ │ │││ │ ││└─────┴──┴─────────┘│ >> >>> │ │││ ││└─┴─┘│ │ │││ │ ││ │ >> >>> │ │││ │└─────┴──┴──┘││ │ ││ │ >> >>> │ ││└─┴─────────────┘│ │ ││ │ >> >>> │ │└─────────────────┴───────┴─┘│ │ >> >>> └─┴─────────────────────────────┴────────────────────┘ >> >>> >> >>> NB. Given the nature of the arguments... >> >>> >> >>> [ (( = +/@:|: ) # ]) #~ #: i.@:^ NB. Redundant "2 >> >>> [ ((= +/@:|:) # ]) #~ #: i.@:^ >> >>> ┌─┬───────────────────────┬────────────────────┐ >> >>> │[│┌─────────────────┬─┬─┐│┌─────┬──┬─────────┐│ >> >>> │ ││┌─┬─────────────┐│#│]│││┌─┬─┐│#:│┌──┬──┬─┐││ >> >>> │ │││=│┌─────┬──┬──┐││ │ ││││#│~││ ││i.│@:│^│││ >> >>> │ │││ ││┌─┬─┐│@:│|:│││ │ │││└─┴─┘│ │└──┴──┴─┘││ >> >>> │ │││ │││+│/││ │ │││ │ ││└─────┴──┴─────────┘│ >> >>> │ │││ ││└─┴─┘│ │ │││ │ ││ │ >> >>> │ │││ │└─────┴──┴──┘││ │ ││ │ >> >>> │ ││└─┴─────────────┘│ │ ││ │ >> >>> │ │└─────────────────┴─┴─┘│ │ >> >>> └─┴───────────────────────┴────────────────────┘ >> >>> >> >>> [ (( = +/"1 ) # ]) #~ #: i.@:^ NB. Summing the rows of a >> matrix >> >>> [ ((= +/"1) # ]) #~ #: i.@:^ >> >>> ┌─┬─────────────────────┬────────────────────┐ >> >>> │[│┌───────────────┬─┬─┐│┌─────┬──┬─────────┐│ >> >>> │ ││┌─┬───────────┐│#│]│││┌─┬─┐│#:│┌──┬──┬─┐││ >> >>> │ │││=│┌─────┬─┬─┐││ │ ││││#│~││ ││i.│@:│^│││ >> >>> │ │││ ││┌─┬─┐│"│1│││ │ │││└─┴─┘│ │└──┴──┴─┘││ >> >>> │ │││ │││+│/││ │ │││ │ ││└─────┴──┴─────────┘│ >> >>> │ │││ ││└─┴─┘│ │ │││ │ ││ │ >> >>> │ │││ │└─────┴─┴─┘││ │ ││ │ >> >>> │ ││└─┴───────────┘│ │ ││ │ >> >>> │ │└───────────────┴─┴─┘│ │ >> >>> └─┴─────────────────────┴────────────────────┘ >> >>> >> >>> This latter form is the capless counterpart of the version provided by >> >>> Lippu Esa. >> >>> >> >>> >> >>> >> >>> >> >>> On Sat, Nov 28, 2015 at 2:27 AM, Linda A Alvord < >> lindaalv...@verizon.net> >> >>> wrote: >> >>> >> >>>> Pascal and others. I am curious to know if you find tacit code easy to >> >>>> read. >> >>>> >> >>>> cr=:([ = [: +/ [: |: #~ #: [: i. ^) #"2 #~ #: [: i. ^ >> >>>> divy=:([: ,. [: <"1 '*' $~ ] ,~ [: <. %) , [: < '*' $~ [ - ] * [: <. % >> >>>> >> >>>> Those two tacit lines seem hard to translate for me. Instead I find >> the >> >>>> expressions below are quite easy to follow. >> >>>> >> >>>> cr=: 13 :'(x= +/ |:(y#x)#:i.x^y) #"2 (y#x)#:i.x^y' >> >>>> divy=: 13 :'(,.<"1((<.x%y),y)$''*''),<(x-y*<.x%y)$''*''' >> >>>> >> >>>> In most cases, with examples there is little documentation that is >> >>>> necessary. >> >>>> >> >>>> 2 cr 5 >> >>>> 0 0 0 1 1 >> >>>> 0 0 1 0 1 >> >>>> 0 0 1 1 0 >> >>>> 0 1 0 0 1 >> >>>> 0 1 0 1 0 >> >>>> 0 1 1 0 0 >> >>>> 1 0 0 0 1 >> >>>> 1 0 0 1 0 >> >>>> 1 0 1 0 0 >> >>>> 1 1 0 0 0 >> >>>> 18 divy 5 >> >>>> ------┐ >> >>>> │*****│ >> >>>> +-----+ >> >>>> │*****│ >> >>>> +-----+ >> >>>> │*****│ >> >>>> +-----+ >> >>>> │*** │ >> >>>> L------ >> >>>> Maybe it is just that the explicit code looks like mathematics. It >> might be >> >>>> interesting and useful to hear how programmers and J users read code >> most >> >>>> easily. >> >>>> >> >>>> Linda >> >>>> -----Original Message----- >> >>>> From: programming-boun...@forums.jsoftware.com >> >>>> [mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Don >> Kelly >> >>>> Sent: Friday, November 27, 2015 10:37 PM >> >>>> To: programm...@jsoftware.com >> >>>> Subject: Re: [Jprogramming] dyadic J >> >>>> >> >>>> there is nothing wrong with saying something like plus =: + conjugate >> =:+ >> >>>> and knowing that plus is intended to be monadic (although +(real >> >>>> number) is the real number in either case. If you want one to work as >> >>>> monadic onlyand the other as dyadic only-then you have to dress them >> up a >> >>>> bit with some test and error message. >> >>>> you can do mean=: sum divideby count in any language. >> >>>> J has 2 meanings for + -which are dependent on the context. English >> also >> >>>> is >> >>>> like that in that some words have two unrelated meanings (e.g bow , >> can, >> >>>> twig, butt ) as well as having some with related meanings (e.g rise, >> level) >> >>>> and a lot of other things that depend on context It would be possible >> to >> >>>> build up a long list of names so that all uses of the primitives have >> >>>> different names and do just what the names indicate but is that of >> any more >> >>>> than limited use? >> >>>> >> >>>> >> >>>> >> >>>> On 11/27/2015 1:08 PM, 'Pascal Jasmin' via Programming wrote: >> >>>> > Are you saying that if I define >> >>>> > >> >>>> > floor =: (<. : (<.@]))"0 _ 0 >> >>>> > >> >>>> > that it does not have integrated rank support? >> >>>> > >> >>>> > The criticism about english and documentation seems hollow to me. I >> >>>> don't >> >>>> say that Nuvoc is useless because it hasn't been implemented in 150 >> >>>> languages. An ability to read the dictionary in English is essential >> to >> >>>> learn J, and code typically uses english shaddows from profile.ijs. >> Making >> >>>> foreign language cover verbs including autotranslating the english >> ones is >> >>>> straightforward, and answers that part of the criticism. Using the >> exact >> >>>> names from the dictionary (what I'm refering to as autodocumentation >> >>>> because >> >>>> the exact same place you would look up i. is where iota will be >> explained.) >> >>>> seems like an elegant way to ease a shallow learning curve on the >> process. >> >>>> > >> >>>> > The entire criticism could be applied to "you should never assign a >> verb >> >>>> to any name" >> >>>> > >> >>>> > >> >>>> > >> >>>> > >> >>>> > ----- Original Message ----- >> >>>> > From: Raul Miller <rauldmil...@gmail.com> >> >>>> > To: Programming forum <programm...@jsoftware.com> >> >>>> > Sent: Friday, November 27, 2015 3:27 PM >> >>>> > Subject: Re: [Jprogramming] dyadic J >> >>>> > >> >>>> > On Thu, Nov 26, 2015 at 4:12 PM, 'Pascal Jasmin' via Programming >> >>>> > <programm...@jsoftware.com> wrote: >> >>>> >> The only disadvantage I recognize is the point about special code. >> >>>> > It would be interesting to go over the reasons you do not recognize >> >>>> > the other disadvantages. >> >>>> > >> >>>> >> As to your other points, because the primitives are tacit, I >> believe >> >>>> there is integrated rank support. >> >>>> >> >> >>>> >> floor b. 0 >> >>>> >> 0 _ _ >> >>>> > You might want to read >> >>>> > http://www.jsoftware.com/pipermail/general/1998-October/000041.html >> >>>> > >> >>>> > All verbs have rank support, even verbs which contain explicit >> >>>> > definitions. However, for some combinations of primitives, the >> >>>> > interpreter takes special steps - bypassing the default >> implementation >> >>>> > of rank support with something more efficient. >> >>>> > >> >>>> >> English is needed to read dictionary, and all of the primitives >> are the >> >>>> monad dictionary entries, so everything is autodocumented. >> >>>> > In my experience, documentation is difficult and autodocumentation >> >>>> > quickly falls victim to entropy. It sounds great, but most examples >> I >> >>>> > have seen become incredibly useless in practice. It's possible to >> work >> >>>> > around this with manual effort, but the effort involved often seems >> to >> >>>> > be greater than the effort of simply doing it manually in the first >> >>>> > place. Where automation shines is replicating the useful manual >> >>>> > efforts. >> >>>> > >> >>>> >> The advantage bigger than the one you mentioned is better seeing >> the >> >>>> intent of code. >> >>>> > Agreed. >> >>>> > >> >>>> > Thanks, >> >>>> > >> >>>> >> >>>> ---------------------------------------------------------------------- >> >>>> 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