Pascal wrote: " The reason I am nearly sure is that in u@:v any adverbs applied to v also apply to u in such a way that it would seem compliacated to undo/avoid. It can still be applied to all with ([: u v)a . But the option of ([: u v a) remains. "
This is an interesting argument in favor of [: vs @: which I have not heard before. However, personally I never wished that, u@:v a parsed as u@:(v a); perhaps because I use the form (u@:v)a roughly as frequently as u@:(v a). Be as it may, you could write, of course: 'u0 u1 u2 u3 u4 y' (13 :) [: u0 [: u1 [: u2 [: u3 u4 to get the cap form although with all the associated explicit caveats or, even better, you could write your own adverb (Cap) such that: [:u0 u1 u2 u3 u4 Cap [: u0 [: u1 [: u2 [: u3 u4 This is so easy to accomplish tacitly nowadays using a wicked adverb (sv) described also in [0]: ( cap=. ([: [:cv [ ] Train) ) train@:(>@:((<[:)"_) ; [ ; ]) Cap=. train o (cap&:train/) f.sv [0] Tacit recursion without $: http://www.jsoftware.com/pipermail/programming/2014-February/035416.html On Thu, Aug 7, 2014 at 8:52 PM, 'Pascal Jasmin' via Programming < [email protected]> wrote: > > Are you sure [: is a better combiner than @: ? > > The reason I am nearly sure is that in u@:v any adverbs applied to v also > apply to u in such a way that it would seem compliacated to undo/avoid. It > can still be applied to all with ([: u v)a . But the option of ([: u v a) > remains. > > So with my primitive techniques I might write a cap adverb such that > > 'u1 a1 u2 a2' cap a3 would get converted to: > ([: u1 a1 u2 a2) a3 > > I understand the same can be achieved with parentheses and @:. Perhaps my > eyes are more sensitive to those. > > Your point about the variables u and v causing crashes/errors is real, and > I've tripped up on my own code before because of it. I think its a good > argument for bringing tacit equivalents to u and v that used to be in the > language (IIRC, [. ].) > > > ----- Original Message ----- > From: Jose Mario Quintana <[email protected]> > To: Programming forum <[email protected]> > Cc: > Sent: Thursday, August 7, 2014 8:19:07 PM > Subject: Re: [Jprogramming] parsing abuse, verb to conjunction > > Pascal wrote: > " > '* %' eval > * % > " > > Yes, one can write an explicit adverb (eval) to evaluate strings. One can > even write a fixed tacit adverb to evaluate strings; Dan’s anonymous evoke > (ae) is such an adverb but (even with some limitations) it is complicated > [0]. This was the motivation for implementing the adverb wl=. 104!:1 in > extended J. Thus, > > '% *'eval > % * > '% *'ae > % * > '% *'wl > % * > > So far everything is fine; but, > > 'v=: % *'eval > % * > v > % * > erase'v' > 1 > 'v=: % *'ae > |domain error > | a:@.a: > > 'v=: % *'wl > v > % * > > erase'v' > 1 > > u v > u v > 'u v'eval > |value error: v > | u v > > 'u v'ae > u v > 'u v'wl > u v > > 'u=. * %'eval > * % > u > |value error: u > |[-0] > > 'u=. * %'ae > |domain error > | a:@.a: > > 'u=. * %'wl > u > * % > > > In other words, explicit definitions refer directly to arguments in a local > environment and an explicit (hybrid) writer has to worry about those > issues. > > Nevertheless, all this is beside the point that I was trying to make: > writing tacitly the common form of a conjunction taking two verbs directly > (as opposed to verb representations) is not possible (as far as I can see) > using the official J interpreter; not even for a simple conjunction that > produces a hook. > > Pascal also wrote > " > '*' (; v2c ) '%' `:6 > * % > '*' '%' (CONJ '; v2c') `:6 > % * > '*' '%' (CONJs '; v2c') (`:6) > * % > " > > Further, one can obviously write the adverb a0=. `:6 such that: > > u`v a0 > u v > > Once an adverb is written in this common form it is straightforward to > write a related adverb (a1) that takes directly the two verbs in strand > form (abusing the concealed capabilities of evoke (`:6)): > > u v a1 > u v > > How? Writing: a1=. ((<'`')`)(`(<@:(5!:1)@:<'a0')) (`:6) > > Writing (u v a1) to get (u v) almost defeats its purpose but (u v) in (u v > a1) is not a train: > > u (v a1) > u v > (v a1) > (`v)(`:6) > > Now after all some puzzling sentences follow: :D > > u v a0 > u v > u (v a0) > u v > > v a0 > |value error: v > |[-13] > Finally, Pascal wrote: > " > ]: is very interesting, though I'm still unsure that @: is a better > combiner than [: > " > > Are you sure [: is a better combiner than @: ? > > > [0] Dan’s anonymous evoke > > http://www.jsoftware.com/svn/DanBron/trunk/environment/anonymous_evoke2.ijs > > > > > > On Wed, Aug 6, 2014 at 8:22 PM, 'Pascal Jasmin' via Programming < > [email protected]> wrote: > > > thank you for sharing, Pepe > > > > your conj looks better for sure. > > > > thought, there is: > > > > '*' (; v2c ) '%' `:6 > > * % > > '*' '%' (CONJ '; v2c') `:6 > > % * > > '*' '%' (CONJs '; v2c') (`:6) > > * % > > > > '* %' eval > > * % > > > > where: > > CONJ =: 2 : ' u (v eval)' > > CONJs=: 2 : 'v eval u' > > > > these turn a conjunction into a "double adverb" > > > > ]: is very interesting, though I'm still unsure that @: is a better > > combiner than [: > > > > > > > > > > ----- Original Message ----- > > From: Jose Mario Quintana <[email protected]> > > To: Programming forum <[email protected]> > > Cc: > > Sent: Wednesday, August 6, 2014 6:35:19 PM > > Subject: Re: [Jprogramming] parsing abuse, verb to conjunction > > > > Pascal wrote: > > " > > this adverb returns a conjunction which is designed to turn any dyadic > verb > > into a conjunction > > " > > > > You might be interested to know that this is also what the adverb (conj) > > defined in [0] does; however, it is tacit, fixed and does not rely on > > linear representations which makes it immune to unwanted side effects and > > linear representations potential mishaps: > > > > NB. v2c... > > > > 5 (, v2c) 3 (2 1 , v2c) + 4 > > 6 5 9 7 > > > > 1 (4 :'x+y') 1 > > 2 > > 1 (4 :'x+y' v2c) 1 > > 2 > > 1 (4 :('assert. x>0';'x+y')) 1 > > 2 > > 1 (4 :('assert. x>0';'x+y') v2c) 1 > > (1) (2 : 0) 1 > > m 4 : 0 > > assert. x>0 > > x+y > > ) n > > ) > > > > NB. conj... > > > > 5 (, conj) 3 (2 1 , conj) + 4 > > 6 5 9 7 > > > > 1 (4 :'x+y') 1 > > 2 > > 1 (4 :'x+y'conj) 1 > > 2 > > 1 (4 :('assert. x>0';'x+y')) 1 > > 2 > > 1 (4 :('assert. x>0';'x+y')conj) 1 > > 2 > > > > The primary objective for defining it (conj) was to produce, via wicked > > verbs, tacit conjunctions (which cannot be derived in the official > version > > J). For example, hook can be defined tacitly as a conjunction as > follows: > > > > hook=. train @: ; f.conj > > * hook % > > * % > > > > Unfortunately, v2c cannot be used for that purpose: > > > > hook=. train @: ; v2c > > * hook % > > |value error: n > > | m train@:; n > > > > In the latest version of the extended J interpreter, not yet released, > > conj, adv, verb and train can be defined as follows: > > > > an=. <@:((":0) ,&< ]) NB. Atomizing a noun (monadic verb) > > fix=. (?:(f.an)) NB. Cloaking the adverb f. as a (monadic) > > verb > > af=. an @: fix f. NB. Atomizing after fixing (monadic verb) > > ew=. adverb ?: (af'an') NB. Encasing a word (adv) > > > > ver=. ?: @: an f. NB. Cloaking an adverb or conjunction as a > > verb (verb) > > adv=. 1 ?: ((1 ?: an f.)ew) NB. Cloaking (the monadic variant of) a > verb > > as an adverb (adv) > > conj=. (2 ?: an) f.adv NB. Cloaking (the dyadic variant of) a > verb > > as a conjunction (adv) > > train=. (`:6)ver NB. Cloaking (`:6) as a verb > > > > Notice also that, in this latest version, ]: has been replaced by ?:. > > Why? Because ]: has been re-implemented to emulate the adverb At defined > > in [1]. Thus, for example, one can now write: > > > > [:u0 u1 u2 u3 u4]: > > u0@:u1@:u2@:u3@:u4 > > > > [:<./+/|-/~]: > > <./@:(+/)@:|@:(-/~) > > > > > > [0] Tacit recursion without $: > > > > http://www.jsoftware.com/pipermail/programming/2014-February/035416.html > > [1] Tacit recursion without $: > > http://www.jsoftware.com/pipermail/programming/2014-March/035662.html > > > > > > > > > > > > > > ---------------------------------------------------------------------- > > > 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
