thanks for sharing, Pepe lambda is very cool, and beats my attempts at easily composing fully contained multi adverbs.
I also find your "Proposition`combine`basis`reduce" framework to recursion interesting, but was unable to find a google reference. Also what is the definition of af ? From Dan's strand notation, http://www.jsoftware.com/pipermail/programming/2009-July/015565.html a small variation t9 =: s 9: and from http://www.jsoftware.com/jwiki/PascalJasmin/double%20adverbs%20vs%20conjunctions , tie =: '`' c2da a semi-tacit (explicit adverb that returns tacit verb) version of your recurse adverb in original[1] and quoted r =: 1 : ' ''`a b c d'' =. m label_. b`(c $:@:d)@.a f.' Alternative syntax is not that bad even if it requires more tokens because seperating the active adverb from the parsing strategy. Even if it is much more elegant as your adverb when you can combine it with its parser. But the alternatives: 9: * 1: * <: t9 r 1:`(* $:@:<:)@.* * 1: * <: tie tie tie r 1:`(* $:@:<:)@.* While there is a loss in elegance, there is a readability benefit of having the parser(s) explicity mentioned. A separation of the work adverb and parser also allows you to insert in-between adverbs (such as setting default parameters/verb phrases). ----- Original Message ----- From: Jose Mario Quintana <[email protected]> To: Programming forum <[email protected]> Cc: Sent: Sunday, February 22, 2015 8:42 PM Subject: Re: [Jprogramming] Can whatever be written tacitly? I wrote: " Dan, if you are reading this ... I wonder if you wrote a recursive prototype for nest2Box, or if you could write one, which you could share. " Dan, never mind; I found: http://www.jsoftware.com/pipermail/programming/2011-November/025493.html and I should be able to take it from there. I also wrote: " Mu shines when it facilitates writing (tacit) adverbs (and "multiple" tacit adverbs). That was the reason that prompted me to write the lambda adverb (mu's sibling) in the first place. I will elaborate on the production of adverbs, via mu, another day. " Today is another day. This is another try at implementing the adverb (`:4) described in [0]. It has been almost a year since my first one [1]. Let us keep going in high gear well above the speed limit, JVERSION Installer: j602a_win.exe Engine: j701/2012-12-06/12:20/x Library: 6.02.023 evoke4=. [: v0 v1 v2 v3 'v1`(v2 $:@:v3)@.v0' mu fact=. evoke4 *`1:`*`<: fact 5 120 fib=. evoke4 >&1`(i.@>:)`(] , +/@(_2&{.)@])`<: fib 7 0 1 1 2 3 5 8 13 But that does not really implement the adverb `:4 because evoke4 is a wicked verb. Let us sweep the black magic under the carpet then, Evoke4=. [: v0 v1 v2 v3 'v1`(v2 $:@:v3)@.v0' mu adv fact=. *`1:`*`<: Evoke4 fact 5 120 fib=. >&1`(i.@>:)`(] , +/@(_2&{.)@])`<: Evoke4 fib 7 0 1 1 2 3 5 8 13 What is adv? It is an adverb that adverbializes a verb. It is easily defined in Jx but it can be also produced, without breaking any speed limit, using an official interpreter (see, for example, the definition of Adv0 in [1]); one can even use mu to produce such an adverb. Let us continue with the path set in [1] and produce a "quadruple" adverb (Ev4) using strand style (without the intrusive `) that does not require a cap. The adverb Evoke4 together with the adverb sna in [1] can produce the wanted adverb Ev4 but there is a better way. Ev4=. [: v0 v1 v2 v3 'v1`(v2 $:@:v3)@.v0' kappa fact=. * 1: * <: Ev4 fact 5 120 fib=. >&1 (i.@>:) (] , +/@(_2&{.)@]) <: Ev4 fib 7 0 1 1 2 3 5 8 13 What is kappa? It is a "multiple" adverb that produces another adverb with "multiplicity' equal to the number of arguments; kappa is lambda's twin. Ev4=. [: v0 v1 v2 v3 (v1`(v2 $:@:v3)@.v0) lambda fact=. * 1: * <: Ev4 fact 5 120 fib=. >&1 (i.@>:) (] , +/@(_2&{.)@]) <: Ev4 fib 7 0 1 1 2 3 5 8 13 Lambda takes directly the defining sentence without quotes and has certain advantages over kappa for producing adverbs. It follows a different approach that depends neither on a verbalized agenda, nor gTxt nor nest2Box. The latest version of Jx is still evolving but the intention is to make the patches for the extensions available once it settles. [0] Bernecky, Robert, and R.K.W. Hui, *Gerunds and Representations*, APL91, ACM. http://dl.acm.org/citation.cfm?id=114059 [1] Tacit recursion without $: http://www.jsoftware.com/pipermail/programming/2014-February/035416.html On Mon, Feb 16, 2015 at 1:36 PM, Jose Mario Quintana < [email protected]> wrote: > > Can whatever be written tacitly? Depending on the type of whatever (verb, > adverb or conjunction) the answers are respectively yes, yes, and no. Any > explicit verb or adverb can always be ,in principle, rewritten tacitly. No > (user-defined) conjunctions can be produced tacitly (using a current > official interpreter). > > The question that follows is: How can whatever (explicit) verb or adverb > be rewritten tacitly? > > Not surprisingly, many challenging questions posted on the forum involve > explicit one-liners verbs such that the explicit-to-tacit conversion form > 13 : '…' produces back explicit verbs instead of the wanted tacit verbs > because the 13 : '…' requirement "every explicit sentence with one or two > arguments which does not use the argument(s) as an operator argument" is > not fulfilled. A sample list is [0,1,2,3,4]. > > I realized recently that this kind of challenges could be solved in a > flash, if one is prepared to come to the dark side. In other words, > another one bites the dust... as long as one is willing to be literally > incorrect. Yes! :) > > A challenge, for example, in the thread corresponding to [4] was to > produce a tacit counterpart (f1) of f0 where, > > JVERSION > Installer: j602a_win.exe > Engine: j803/2014-10-19-11:11:11 > Library: 6.02.023 > > f0=. 4 :'x @.0&.>/y'"_1 > > F0=. ((-~ +/)"1)`((*~ +/)"1)`((+~ +/)"1)`((%~ +/)"1) > R0=. >: i. 5 > D0=. (i.5 3);(i.5 2);(i.5 4);(i.5 3) > > |.F0 f0 (<R0),. D0 > ┌───────────────────┬──────────────┬──────────────┬──────────────┐ > │ 3 1.5 1 0.75 0.6│ 7 8 9 10 11│ 1 2 3 4 5│ 2 1 0 _1 _2│ > │12 6 4 3 2.4│23 24 25 26 27│ 5 10 15 20 25│11 10 9 8 7│ > │21 10.5 7 5.25 4.2│39 40 41 42 43│ 9 18 27 36 45│20 19 18 17 16│ > │30 15 10 7.5 6│55 56 57 58 59│13 26 39 52 65│29 28 27 26 25│ > │39 19.5 13 9.75 7.8│71 72 73 74 75│17 34 51 68 85│38 37 36 35 34│ > └───────────────────┴──────────────┴──────────────┴──────────────┘ > > A quick solution is, > > > > > f1=. > ((<<0 6),(<(<,'X'),(<'@.'),(<<(,'0');0),(<'&.'),(<,'>'),(<,'/'),<, > 'Y'),<(,0);(,1);(,2);(,3);(,4);(,5);,6)&((1&({::) > ((<'@.') (0:`)(,^:)) 2&({: > :))@:(<@:((0: 0&({::)@:]`(<@:(1&({::))@:])`(2&({::)@:])} ])@:(3 0 > 1&{)) 1} ])@:(, <))@:,&:(<@:((,'0') ,&< ]))"_1 > > ) > > |.F0 f1 (<R0),. D0 > ┌───────────────────┬──────────────┬──────────────┬──────────────┐ > │ 3 1.5 1 0.75 0.6│ 7 8 9 10 11│ 1 2 3 4 5│ 2 1 0 _1 _2│ > │12 6 4 3 2.4│23 24 25 26 27│ 5 10 15 20 25│11 10 9 8 7│ > │21 10.5 7 5.25 4.2│39 40 41 42 43│ 9 18 27 36 45│20 19 18 17 16│ > │30 15 10 7.5 6│55 56 57 58 59│13 26 39 52 65│29 28 27 26 25│ > │39 19.5 13 9.75 7.8│71 72 73 74 75│17 34 51 68 85│38 37 36 35 34│ > └───────────────────┴──────────────┴──────────────┴──────────────┘ > > How was f1`s code produced? Quite easily, using the latest version of a > modified interpreter (Jx) that takes literacy incorrectness to new lows... > > JVERSION > Installer: j602a_win.exe > Engine: j701/2012-12-06/12:20/x > Library: 6.02.023 > > f1=. [: X Y 'X @.0&.>/Y' mu o ,&:an f. "_1 f. > > The rest required to wrap and repair its linear representation (for the > purpose of showing f1 to this forum running on an official interpreter), > > 66 (Wrap=.-@:[ ]\ 5!:5@<@:]) 'f1' > ((<<0 6),(<(<,'X'),(<'@.'),(<<(,'0');0),(<'&.'),(<,'>'),(<,'/'),<, > 'Y'),<(,0);(,1);(,2);(,3);(,4);(,5);,6)&((1&({::) ,^:(0:`@.) 2&({: > :))@:(<@:((0: 0&({::)@:]`(<@:(1&({::))@:])`(2&({::)@:])} ])@:(3 0 > 1&{)) 1} ])@:(, <))@:,&:(<@:((,'0') ,&< ]))"_1 > > ((<'@.') (0:`)(,^:)) > ,^:(0:`@.) > > The definitions of an and o are, > > an > <@:((,'0') ,&< ]) > > o > @: > > What is mu? > > 66 Wrap 'mu' > (2?:(<(,'0');({:@:] (?:(<'`:'))&6 :.(<@:((,'0') ,&< ]))@:, <@:((,' > 0') ,&< ])@:(?:(<'`.')))`((?:(<'`:'))&6 :.(<@:((,'0') ,&< ]))@:({: > ; <@:((,'0') ,&< ])@:}:)@:}:@:])@.(>@:((<[:)"_) -: [)))((<(,'0'); > ([ (?:(<,'&')) >@:])&(<(1&({::) ,^:(0:`@.) 2&({::))@:(<@:((0: 0&({ > ::)@:]`(<@:(1&({::))@:])`(2&({::)@:])} ])@:(3 0 1&{)) 1} ])@:(, <) > )@:(1 2 3&{)@:(<@:(<@:(2&({::) (i."_ 0) 1&({::))) 1} ])@:((((,&< ~ > .)@:[ (1&({::)@:[ ,&< (1&({::)@:[ i. ] { 0&({::)@:[)L:_ 0) ]) ((;: > '()') >@:{.^:(1 = #)L:1^:_@:(>@:{.L:1)@:((('';1) <@:,;.1 ] <@:(}.@ > :}:^:(1 < #));.2&>~ (= <./)&.>@:{:)L:1^:(1 + >./@:>@:{:))@:(i.@#@] > ,&< +/\@:(-/)@:(=/)) ]))@:((<@:((,'0') ,&< ])@:".@:]^:[&.>~ ([: ( > ('''' = {.) +. (':' ~: {:) *. '_0123456789' e.~ {.)@|: 2 {.&> ]))@ > :(}.~ (_1 * 'NB.' (('.:' e.~ {:@]) < (-: }:)) 4 {.&> {:))@:;:)@:(( > ?:(<'`:'))&6 :.(<@:((,'0') ,&< ])))@:{:@:(0&({::)) 2 3} ])@:(<@:(} > :@:(0&({::))) 1} ])@:('W E I'&(] , ;:@:[))@:<),<(,'0');(2?:(<(,'0' > );({:@:] (?:(<'`:'))&6 :.(<@:((,'0') ,&< ]))@:, <@:((,'0') ,&< ])@ > :(?:(<'`.')))`((?:(<'`:'))&6 :.(<@:((,'0') ,&< ]))@:({: ; <@:((,'0 > ') ,&< ])@:}:)@:}:@:])@.(>@:((<[:)"_) -: [)))) > > Alright, alright; its linear representation is seriously faulty anyway. > In English words: mu is an adverb written after its sibling adverb lambda > which I have mentioned before. Mu allows the production of a wicked verb > specified by a sentence written in a lambda/strand notation style. The > sentence implies the sequential production of multiple adverbs that > culminates with the production of the wicked verb. For example mu in the > sentence ( [: X Y 'X @.0&.>/Y' mu ) is what Pascal could refer as a > "multiple" adverb, in this particular case, a "quadruple" adverb [5]. > > Dan, if you are reading this, you might have noticed that you very own > nest2Box and gTxt verbs [6] are embedded in mu; thanks for writing and > sharing them. I understand your reasons for writing nest2Box cutting > bottom-up rather than recursing top-down. However, one can now embed > anonymous recursive verbs even when one is using an official interpreter. > I wonder if you wrote a recursive prototype for nest2Box, or if you could > write one, which you could share. I am curious if a possible TCO Jx > version of nest2Box could be competitive. > > What else can mu allow one to do? > > plus=. [: X Y 'X+Y NB. Are X and Y nouns or verbs?' mu > type'plus' > ┌────┐ > │verb│ > └────┘ > > plus o (an"0) 2 3 NB. Plus producing a noun > 5 > 2 plus o (an"0) o , 3 > 5 > plus 2`.3 NB. `. is a Jx extension > 5 > > plus *`% NB. Plus producing a verb :) > * + % > (*`'') plus o , (%`'') > * + % > 1 2 3 (*`'') plus o , (%`'') 4 5 6 > 4.25 10.4 18.5 > > plus 2`.% > 2 + % > plus 2`.% 3 4 5 > 2.33333333 2.25 2.2 > > Mu allows the use multiple formal parameters, continuing with the applying > gerund example [4], > > g0=. [: F D R '|.F f1 (<R),. D NB. Three parameters' mu o (an e) f. > NB. "Quintuple" adverb > > g0 (F0;D0;R0) NB. Boom shakalaka! > ┌───────────────────┬──────────────┬──────────────┬──────────────┐ > │ 3 1.5 1 0.75 0.6│ 7 8 9 10 11│ 1 2 3 4 5│ 2 1 0 _1 _2│ > │12 6 4 3 2.4│23 24 25 26 27│ 5 10 15 20 25│11 10 9 8 7│ > │21 10.5 7 5.25 4.2│39 40 41 42 43│ 9 18 27 36 45│20 19 18 17 16│ > │30 15 10 7.5 6│55 56 57 58 59│13 26 39 52 65│29 28 27 26 25│ > │39 19.5 13 9.75 7.8│71 72 73 74 75│17 34 51 68 85│38 37 36 35 34│ > └───────────────────┴──────────────┴──────────────┴──────────────┘ > > Mu shines when it facilitates writing (tacit) adverbs (and "multiple" > tacit adverbs). That was the reason that prompted me to write the lambda > adverb (mu's sibling) in the first place. I will elaborate on the > production of adverbs, via mu, another day. It is ironic that naming > arguments facilitates the production of some kind of verbs and adverbs that > do not name arguments. Oh well, "We do what we have to do so that we can > do what we want to do." > > [0] Conjunction in tacit verb > > http://www.jsoftware.com/pipermail/programming/2015-January/040965.html > > [1] Substitution with under > http://www.jsoftware.com/pipermail/programming/2014-May/037213.html > > [2] Tacit? > > http://www.jsoftware.com/pipermail/programming/2014-January/034499.html > > [3] Tacit help needed > > http://www.jsoftware.com/pipermail/programming/2009-August/015798.html > > [4] Applying gerund > > http://www.jsoftware.com/pipermail/programming/2009-August/016023.html > > [5] Double adverbs vs conjunctions > > http://www.jsoftware.com/jwiki/PascalJasmin/double%20adverbs%20vs%20conjunctions > > [6] Anonymous Evoke (ae), take 2 > > http://www.jsoftware.com/svn/DanBron/trunk/environment/anonymous_evoke2.ijs > > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
