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

Reply via email to