Personally, I'll be more impressed when I see documentation on the resulting grammar.
I have had few problems creating code which uses inconsistent grammar. I can imagine the poetic delight in writing code which takes advantage of these ambiguities. I very much understand that this kind of thing can seem essential in relieving an otherwise oppressive sense of boredom. But documenting and debugging are the hard parts. And (and, in my opinion, even more essential). As for efficiency: “Overemphasis of efficiency leads to an unfortunate circularity in design: for reasons of efficiency early programming languages reflected the characteristics of the early computers, and each generation of computers reflects the needs of the programming languages of the preceding generation.” -Ken Iverson Thanks, -- Raul On Thu, Aug 3, 2017 at 12:12 PM, Jose Mario Quintana <jose.mario.quint...@gmail.com> wrote: > A common objective of many Jx extensions is to unleash the latent power of > an official J interpreter to facilitate the use of higher-order functions > (verbs, adverbs and conjunctions) by providing the means to pass them, > directly, as arguments to other functions. > > Arguably, the Dictionary [0] only allows: > > 0. Verbs acting on nouns to produce nouns > 1. Adverbs and conjunctions acting on nouns or verbs to produce nouns, > verbs, adverbs or conjunctions > > The design reasons for these restrictions are mysterious to me; the most > plausible explanation that I am aware is given in the post [1]. > > Ever since a back door was opened (an account of the story can be found in > the post[2]) I have been exploring the consequences of embracing high-order > functions in J (and particularly in Jx) from the perspective of tacit > adverbial (and tacit conjunctional) programming. (Actually, just a few > weeks earlier I had been playing with what is now in Jx v1.0 the train > aspect of ".. because I thought that complete adverbial programming was > possible with just that facility and it is possible as far as I can see; > this is why I realized immediately that Dan had opened a back door > inadvertently and I rushed through it). It became apparent very soon to me > that there were many advantages when one can operate tacitly on verbs, > adverbs and conjunctions in a very similar way that one can operate on > nouns. > > Years ago I used to write adverbs and conjunctions tacitly via Jx foreigns > using literals (in a similar way that Pascal does it now albeit > explicitly). I found it painful, in contrast, now it is a joy. The > appendix shows a sample process. It might look strange and puzzling; then > again, J programming might look strange and puzzling to the uninitiated. A > key facility is the (higher-order) verb ?: used at the beginning of the > script to produce the pro-verb ver and the pro-adverbs adv and conj. > These, respectively, allow for verbing adverbs and conjuncions, and reduce > tacit adverbial and conjunctional programming to to verbal programming > which happens to be Turing complete. > > > References > > [0] II. Grammar > http://www.jsoftware.com/help/dictionary/dict2.htm > > [1] [Jprogramming] Recursive programming (and scoping therein) William > Tanksley, Jr > http://www.jsoftware.com/pipermail/programming/2013-February/031672.html > > [2] [Jprogramming] J functional programming extensions Jose Mario Quintana > http://www.jsoftware.com/pipermail/programming/2013-March/031883.html > > > Appendix > > The objective is to write a tacit adverb At for pipelining verbs with the > premise that space is the best delimiter, for example, given the verbs v0, > ... v4 > > [: v0 v1 v2 v3 v4 At > v0@:v1@:v2@:v3@:v4 > > From the high-order functional perspective this should be a matter of > inserting @: between the verb arguments; actually, it is with some minor > caveats because verbs and conjunction do not associate the same way and the > default behavior of insert / for a single input is not adequate in this > case. > > First, a developing session from scratch, that resembles the original > development, is shown; followed by a session with the collected > definition(s) including an example; and last, the collected definition(s) > script. > > Beware of line-wrapping! > > Developing session... > > JVERSION > Installer: j602a_win.exe > Engine: j806/j64/windows/beta/BEST/Jx/2017-07-27T10:25:25 > Library: 6.02.023 > > o=. @: > (;:'ver conj adv')=. _3 _2 _1<@:?:("0) 0 > > at=. ver adv @: NB. Verbing @: (dyadic verb) > > ( G=. [: v0 v1 v2 v3 v4 ]: ) NB. Boxed array of actual (undefined) verbs > for testing > ┌──┬──┬──┬──┬──┐ > │v0│v1│v2│v3│v4│ > └──┴──┴──┴──┴──┘ > > at&:"../ G NB. Dyadic verbs associate to the right... > v0@:(v1@:(v2@:(v3@:v4))) > > (at~&:"../) o |. G NB. Conjunctions associate to the left > v0@:v1@:v2@:v3@:v4 > > (at~&:"../) o |. [:+]: NB. Wrong answer for a single boxed verb... > ┌─┐ > │+│ > └─┘ > > ".. o (at~&:"../) o |. [:+]: NB. Right answer > + > > > match=. -:&:< conj NB. Matching words? (conjunction) > > > At=. ]: ".. o (at~&:"../) o |. f.adv > NB. Pipelining verbs (adverb) > NB. Using the extended form (a a) (adverb) > assert ([:+At) match + > assert ([: v0 v1 v2 v3 v4 At) match (v0@:v1@:v2@:v3@:v4) > > > Collected definitions(s) session... > > conj=. _2 ?: 0 NB. Conjunction definition (adverb) > match=. -:&:< conj NB. Matching words? (conjunction) > > At=. ]: "..@:((3?:((<'@:')))~&:("..)/)@:|. (_1?:0) > NB. Pipelining verbs (adverb) > assert ([:+At) match + > assert ([: v0 v1 v2 v3 v4 At) match (v0@:v1@:v2@:v3@:v4) > > NB. Example: Farey sequence: http://rosettacode.org/wiki/Farey_sequence#J > ... > > Farey=. [:0&,/:~~.(#~ <:&1),%/~x:>:i.At > > Farey > 0&,@:(/:~)@:~.@:(#~ <:&1)@:,@:(%/~)@:x:@:>:@:i. > Farey 5 > 0 1r5 1r4 1r3 2r5 1r2 3r5 2r3 3r4 4r5 1 > > > Collected definition(s) script... > > conj=. _2 ?: 0 NB. Conjunction definition (adverb) > match=. -:&:< conj NB. Matching words? (conjunction) > > At=. ]: "..@:((3?:((<'@:')))~&:("..)/)@:|. (_1?:0) > NB. Pipelining verbs (adverb) > assert ([:+At) match + > assert ([: v0 v1 v2 v3 v4 At) match (v0@:v1@:v2@:v3@:v4) > > NB. Example: Farey sequence: http://rosettacode.org/wiki/Farey_sequence#J > ... > > Farey=. [:0&,/:~~.(#~ <:&1),%/~x:>:i.At > > Farey > Farey 5 > > > > > On Tue, Aug 1, 2017 at 4:55 PM, Jose Mario Quintana < > jose.mario.quint...@gmail.com> wrote: > >> >> A brief description of the Jx v1.0 extensions, together with links to a >> Windows 64 bit dll, a Unix 64 bit so binaries and the patch corresponding >> to the J806 source can be found at, >> http://www.2bestsystems.com/foundation/j/jx1 >> >> Summary >> >> - Spelling >> - Names with unicode characters >> - Primitives >> Added =.. =:: $:: [. ]. ]: ".. ":: `. ?: i.. O. >> Extended ~ $. >> - Foreign >> Added 104!:5 Unnamed Execution >> >> - Trains >> a v Added (different from Jx v0) >> a a Extended (different from Jx v0) >> c a Resurrected >> a c a Resurrected >> >> The Jx v0 page, >> http://www.2bestsystems.com/foundation/j/jx0 >> will be removed in the near future >> >> Time permitting, there will be soon a script with assertions for those who >> want to verify binaries targeted for other platforms and I will try to >> illustrate the facilities in action with some scripts. >> >> >> > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm