I will not dare to explain it again after Dan has done so; see, http://www.jsoftware.com/pipermail/programming/2013-January/031249.html the form is slightly different but the same logic applies. In my opinion, that thread and the related one: http://www.jsoftware.com/pipermail/programming/2013-January/031260.html are worth reading, including the dissenting arguments..
By the way, I miswrote, Cloak=. (0:`)(,^:) is an adverb (not a conjunction). Moreover, for a tacit writer, I for one, it feels indeed as deus (verbalized adverb or conjunction) ex machina (^: or an alternative). On Fri, Feb 21, 2014 at 1:11 PM, Pascal Jasmin <godspiral2...@yahoo.ca>wrote: > neat. > > tie > ,^:(0:``) > > tie&'' f. > ,^:(0:``)&'' > > which is using the gerund (v1`v2) version of ^: . This appears to be > undocumented in that v2 here is a conjunction(`). I assume that using an > adverb as v2 is impossible? > > The other peculiarity is that v1 is 0: which means that , never executes. > Is that right? > > > > ----- Original Message ----- > From: Jose Mario Quintana <jose.mario.quint...@gmail.com> > To: Programming forum <programm...@jsoftware.com> > Cc: > Sent: Friday, February 21, 2014 11:31:56 AM > Subject: Re: [Jprogramming] Generating code from templates > > The verbalized conjunctions tie and rank can be produced as follows: > > 9!:14 '' > j701/2011-01-10/11:25 > > Cloak=. (0:`)(,^:) NB. Conjunction to cloak adverbs and conjunctions as > verbs > Cloak=. (5!:1@<'Cloak')Cloak NB. Cloaking Cloak > > 'tie rank'=. (Cloak @: < each) @: ;: '` "' NB. Cloaking tie (`) and rank > (") > > > cf=. {.@(tie&'')@(rank&_)"0 f. > 100"_`(200"_)`(300"_) -: cf 100 200 300 > 1 > > > Cloak can also be produced without using ^: (although with a caveat). > Members interested in following the beginnings of the story can look at > http://www.jsoftware.com/pipermail/programming/2013-March/031883.html . > > > On Thu, Feb 20, 2014 at 8:52 PM, Raul Miller <rauldmil...@gmail.com> > wrote: > > > This would be more fun if you provided definitions for tie and rank (and > > others you use) in an addon. > > > > Without that, it feels like deus ex machina (and does not execute for me > > like it does for you). > > > > Thanks, > > > > -- > > Raul > > > > > > On Thu, Feb 20, 2014 at 6:06 PM, Jose Mario Quintana < > > jose.mario.quint...@gmail.com> wrote: > > > > > " > > > Anyway, thought I'd share, and see if anyone else has useful tools for > > > manipulating J code (metaprogramming). > > > " > > > > > > Dan, I will try to show some meta-programming exercises soon. I am > > jumping > > > into the darkness hoping that I will land well; so far, so good. In > the > > > meantime, the following is a F^4 underground verb corresponding to > Raul's > > > explicit verb (using verbalized primitive conjunctions): > > > > > > cf=. {.@(tie&'')@(rank&_)"0 f. > > > > > > 100"_`(200"_)`(300"_) -: cf 100 200 300 > > > 1 > > > > > > > > > > > > On Thu, Feb 20, 2014 at 2:39 PM, Dan Bron <j...@bron.us> wrote: > > > > > > > There was a question on StackOverflow today on generating constant > > > > functions from the items of an array. As in, 100 200 300 <==> > > > > 100"_`(200"_)`(300"_) . > > > > > > > > As a more general question, how can we specify code templates and > then > > > use > > > > them to dynamically produce gerunds for later execution? * > > > > > > > > Here's one idiom I've found useful in such situations: > > > > > > > > substit =: [^:(__-:])L:_ 0 > > > > > > > > template =: __"_ NB. The template; note the __ > > > > TEMPLATE =: {. template f.`'' NB. Atomic rep of template > > > > > > > > GERUND =: TEMPLATE substit"_1 _~ 100 * 1 + i.3 > > > > > > > > GERUND`:6 > > > > (100"_) (200"_) 300"_ > > > > > > > > GERUND@.0 > > > > 100"_ > > > > > > > > GERUND@.2 'hello' > > > > 300 > > > > > > > > The basic idea is to "fill in the blanks" in the template with the > > > inputs. > > > > Here, the blank is __ (negative infinity), so we look for that in the > > > > gerund template, and when we find it, we replace it with the input. I > > > kind > > > > of like how the verb does this: first, we only bother looking at > level > > 0 > > > > (because __ is unboxed, so it will never appear above level 0), and > > > > second, the verb is passive until __ is detected (because ^:(]-:__) > is > > > > ^:0, i.e. "do nothing and just return the RHA" until then). > > > > > > > > One possible issue is what we use to denote "blank". If we're going > to > > > > allow users to pass in any gerund, then he could potentially want to > > > > include __ as part of the code to be produced, rather than replaced. > > > There > > > > are a couple possible ways to address that limitation. First, we > could > > > use > > > > a value which a user is very unlikely to want to produce (as opposed > to > > > > replace), i.e. _. : > > > > > > > > substit =: [^:(1-:128!:5@])L:_ 0 > > > > SPARTA =: ({. _."_ `'') substit"_1 _~ 300 > > > > SPARTA`:6 > > > > 300"_ > > > > > > > > Or, we could define substit as an adverb (adjective), which takes the > > > > "blank" as an argument: > > > > > > > > Substit =: (-:&) (@]) ([^:) (L:_ 0) > > > > > > > > substit =: 'blank' Substit > > > > substit > > > > [^:(-:&'blank'@])L:_ 0 > > > > > > > > ; , ((< {. 'blank'&;`'') substit~&.> ;:'fill in the blanks' )`:0 > '!' > > > > fill!in!the!blanks! > > > > > > > > But if we do that, we have to start wondering about the 0 in L:_ 0 , > > > > because the user's "blank" might be boxed, and therefore have L.>0 . > Of > > > > course, we could fix this up by making the L: dynamic: > > > > > > > > Substit =: adverb : '[^:(m-:])L:(_,L.m)' > > > > > > > > NOTNULL =: ({. ~:&a:` '') a: Substit~ <'#N/A#' > > > > NOTNULL`:6 > > > > ~:&(<'#N/A#') > > > > > > > > But it might be more fun to go meta-meta: > > > > > > > > (({. substit f.`'') substit~ _999)`:6 > > > > [^:(_999 -: ])L:_ 0 > > > > > > > > Here, define the "standard" blank to be __, and then let the user > > change > > > it > > > > by using substit :) > > > > > > > > Anyway, thought I'd share, and see if anyone else has useful tools > for > > > > manipulating J code (metaprogramming). > > > > > > > > -Dan > > > > > > > > * For a recent example of where such metaprogramming might be > useful, > > or > > > > convenient, see the postscript of: > > > > > > > > > > > > > > http://www.jsoftware.com/pipermail/programming/2013-December/034373.html > > > > > > > > Other examples can be found with a forum archive search for the > string > > > L:0 > > > > _ > > > > > ---------------------------------------------------------------------- > > > > 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