After the warning, tacit solutions to the Exercise 7 follow.
Exercise 7. Produce the adverbs a7x0 and a7x1 that provide monadic or
dyadic recursion scope to a tacit verb denoted by the self reference verb
($:) yielding another tacit verb (a wicked verb, if necessary). For
example,
mRS=. 'a7x0'f. NB. Monadic recursive scope
dRS=. 'a7x1'f. NB. Dyadic recursive scope
fac=. 1:`(] * $:@:<:)@.*
(1 + fac f.mRS)5
121
binomiall=. 1:`(%~ * $:&:<:)@.(*@:[)
3 (1 + binomial f.dRS) 7
36
Hint: My solutions are wicked.
___ _ _
/ __| _ __ ___ (_) | | ___ _ _ ___
\__ \ | '_ \ / _ \ | | | | / -_) | '_| (_-< _ _ _
|___/ | .__/ \___/ |_| |_| \___| |_| /__/ (_) (_) (_)
|_|
These are a couple of wicked solutions:
mRS=. (`'') (<&.:train f.av) (`,)(`]) (`:6) (train f. @: )
(&:(an f.))
NB. Monadic recursion scope
assert (1 + (1:`(* $:@<:)@.*) mRS 4) -: 25 NB. Factorial
fixed
dRS=. (`'') (<&.:train f.av) (`,) (`]) (,`) ([`) (`:6) (train f. @: )
(&:(an f.))
NB. Dyadic recursion scope
assert (3 (1 + (1:`(%~ * $:&:<:)@.(*@:[))dRS) 7) -: 36 NB. Binomial
fixed
How do they work? (The following assumes the J Wicked Toolkit script has
been executed previously.)
One can frame the scope of $: (e.g., fac f.) by boxing the longest verb
that contains it (this is yet another reason why one might want to box a
verb)
fac f. <adv
┌──────────────────┐
│1:`(] * $:@:<:)@.*│
└──────────────────┘
and, together with the atomic representation of its argument (e.g., 5),
produce a list
((fac f. <adv) , ])&:an f. 5
┌──────────────────┬─────┐
│1:`(] * $:@:<:)@.*│┌─┬─┐│
│ ││0│5││
│ │└─┴─┘│
└──────────────────┴─────┘
that train can understand
train o ((fac f. <adv) , ])&:an f. 5
120
This resulting verb can be fixed and embedded within another tacit fixed
verb while keeping its scope
train o ((fac f. <adv) , ])&:an f.
,^:(0:``:)&6 :.(<@:((,'0') ,&< ]))@:((<1:`(] * $:@:<:)@.*) ,
])&:(<@:((,'0') ,&< ]))
This latter verb is the one that mRS produces,
fac f.mRS
,^:(0:``:)&6 :.(<@:((,'0') ,&< ]))@:((<1:`(] * $:@:<:)@.*) ,
])&:(<@:((,'0') ,&< ]))
(1 + fac f.mRS) 5
121
The adverb dRS functions in a similar fashion.
On Sun, Apr 24, 2016 at 7:54 PM, Jose Mario Quintana <
[email protected]> wrote:
> Now that the first round of exercises are almost out of the way we can
> entertain some utility adverbs.
>
> This round is open in the sense that explicit adverbs are also allowed as
> solutions; but, of course, tacit solutions would be better and fixed tacit
> solutions would be the best ;)
>
>
> Exercise 4. Produce the Golden Age Identity adverb a4 (Id): "]: is the
> identity adverb, that yields its argument." For example,
>
> Id=. 'a4'f.
>
> 1 2 3 Id
> 1 2 3
> * Id
> *
> 1 2 3 * Id 4 5 6
> 4 10 18
>
> Hint: It is easy using hg or adv.
>
>
> Exercise 5. Produce the adverb a5 that yields its argument boxed. For
> example,
>
> (i.2 3) a5
> ┌─────┐
> │0 1 2│
> │3 4 5│
> └─────┘
>
> Hint: It is easy using adv.
>
>
> Exercise 6. Let us assume that u is an arbitrary monadic verb which is
> expensive to compute. Produce a6 such that (u a6)Y -: (u ("_1))Y but u
> a6 does not repeat the computation of the same items of Y. For example,
>
> cheap=. 'a6'f.
>
> delay=. 6!:3
> timer=. 6!:2
>
> timer'delay ("_1) (5$%:2)'
> 7.07262802
> timer'delay cheap (5$%:2)'
> 1.41460927
>
> (delay cheap -: delay ("_1)) (5$%:2)
> 1
>
> (([echo) o (+/) cheap ; +/ ("_1))4 3 2 $ i.4
> 2 5
> 4 7
> ┌───┬───┐
> │2 5│2 5│
> │4 7│4 7│
> │2 5│2 5│
> │4 7│4 7│
> └───┴───┘
>
>
> Exercise 7. Produce the adverbs a7x0 and a7x1 that provide respectively
> monadic and dyadic recursion scope to a tacit verb denoted by the self
> reference verb ($:) yielding another tacit verb (a wicked verb, if
> necessary). For example,
>
> mRS=. 'a7x0'f. NB. Monadic recursive scope
> dRS=. 'a7x1'f. NB. Dyadic recursive scope
>
> fac=. 1:`(] * $:@:<:)@.*
> (1 + fac f.mRS)5
> 121
>
> binomial=. 1:`(%~ * $:&:<:)@.(*@:[)
> 3 (1 + binomial f.dRS) 7
> 36
>
> Hint: My solutions are wicked.
>
>
> On Sun, Mar 13, 2016 at 10:59 PM, Jose Mario Quintana <
> [email protected]> wrote:
>
>> Welcome to the Adverbial (and Conjunctional) Tacit Jymnasium :)
>>
>> Orthodox and wicked routines will be practiced here for those interested
>> in developing adverbial (and conjunctional) tacit muscles. Official
>> interpreters will be the standard equipment; however, Unbox, Jx, and other
>> J interpreters (including Golden Age J interpreters), as well as Toolkits ,
>> see for example [0], and alike (e.g., the tacit translator), are in general
>> more than acceptable although occasionally some restrictions might be
>> imposed aiming to develop certain muscles. Since adverbial (and
>> conjunctional) tacit writing can (following two closely related approaches)
>> be reduced to verbal tacit writing, this is also a place to exercise verbal
>> tacit muscles. In addition, some adverbs (and conjunctions) which will be
>> eventually shown here can provide general support for producing tacit
>> verbs, adverbs and conjunctions.
>>
>> Instructors will describe an exercise and, unless otherwise specified in
>> advance, will be prepared to show at least one way to perform it if patrons
>> (including other instructors) have not performed the exercise after a
>> reasonable time; alright, they have bragging rights either way ;) The
>> exercises would typically involve producing adverbs with bonus points for
>> producing fixed versions of the adverbs and their products. Exercises are
>> not required to be brand new. Given credit to the originators of certain
>> techniques is not necessary (but you know who you are and bragging is
>> allowed). Spoiler alerts by instructors and patrons will be appreciated.
>>
>> Instructors (Dan, Thomas et al. are you listening?), not to mention
>> patrons (including beginners), are all very welcome here. How long will
>> the Jym remain open? Indefinitely, as long as there enough patrons and
>> instructors or we are kicked out of here.
>>
>> Let us start with a few exercises with different degrees of difficulty
>> (feel free to ask any questions just be patient with me, sometimes I
>> disappear for a few days):
>>
>>
>> - Exercise 0. Rank infinity
>>
>> Produce a (tacit, of course) adverb a0 such that u a0 produces u"_
>> where u is a noun or a verb, for example,
>>
>> u a0
>> u"_
>>
>> *:@:(+/) a0
>> *:@:(+/)"_
>>
>> u=. 1 2 3
>>
>> u a0
>> 1 2 3"_
>>
>> 1 2 3 a0
>> 1 2 3"_
>>
>>
>> - Exercise 1. Operating on the first and last items
>>
>> Produce an adverb a1 such that u a1 produces {. u {: where u is a
>> verb, for example,
>>
>> erase'u'
>> 1
>>
>> u a1
>> {. u {:
>>
>> * a1
>> {. * {:
>>
>> * a1 2 3 5 7
>> 14
>>
>>
>> - Exercise 2. Back insert
>>
>> Produce an adverb a2 which is a tacit counterpart of the explicit adverb
>> rscan, see [1],
>>
>> rscan=. 1 : '((>: - m |&# y) |. m)/y'
>>
>> for example,
>>
>> (+`%`* rscan\. ,: +`%`* a2\.) 1 2 3 4 5 6 7
>> 1.16184971 0.161849711 12.3571429 4.11904762 0.119047619 42 7
>> 1.16184971 0.161849711 12.3571429 4.11904762 0.119047619 42 7
>>
>> (+`-`*`% rscan\. ,: +`-`*`% a2\.) 1 2 3 4 5 6 7 8
>> _0.6 1.6 0.8 3.75 _0.25 5.25 0.875 8
>> _0.6 1.6 0.8 3.75 _0.25 5.25 0.875 8
>>
>>
>> - Exercise 3. Replace items
>>
>> Produce an adverb a3 which is a tacit counterpart of the explicit adverb
>> ritem, see [2],
>>
>> ritem =: 1 : (':' ; 'x (I.m-:"_1 _ y) } m')
>>
>> for example,
>>
>> C=. 3 4$i.8
>> A=. i.3 2 4
>>
>> assert 9 8 7 6 (C ritem -: C a3) 0 1 2 3
>> assert (100%i.2 4) (A ritem -: A a3) 16+i.2 4
>>
>>
>> References
>>
>> [0] [Jprogramming] Tacit Toolkit (was dyadic J)
>>
>> http://www.jsoftware.com/pipermail/programming/2015-December/043757.html
>>
>> [1] [Jprogramming] Am I understanding m/y ?
>>
>> http://www.jsoftware.com/pipermail/programming/2016-February/044483.html
>>
>> [2] [Jprogramming] Replace Items
>> http://www.jsoftware.com/pipermail/programming/2016-March/044625.html
>>
>
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm