> Are you sure [: is a better combiner than @: ?

The reason I am nearly sure is that in u@:v any adverbs applied to v also apply 
to u in such a way that it would seem compliacated to undo/avoid.  It can still 
be applied to all with ([: u v)a .  But the option of ([: u  v a) remains.

So with my primitive techniques I might write a cap adverb such that

'u1 a1 u2 a2' cap a3 would get converted to:
([: u1 a1 u2 a2) a3

I understand the same can be achieved with parentheses and @:.  Perhaps my eyes 
are more sensitive to those.

Your point about the variables u and v causing crashes/errors is real, and I've 
tripped up on my own code before because of it.  I think its a good argument 
for bringing tacit equivalents to u and v that used to be in the language 
(IIRC, [. ].)


----- Original Message -----
From: Jose Mario Quintana <[email protected]>
To: Programming forum <[email protected]>
Cc: 
Sent: Thursday, August 7, 2014 8:19:07 PM
Subject: Re: [Jprogramming] parsing abuse, verb to conjunction

Pascal wrote:
"
   '* %' eval
* %
"

Yes, one can write an explicit adverb (eval) to evaluate strings.  One can
even write a fixed tacit adverb to evaluate strings; Dan’s anonymous evoke
(ae) is such an adverb but (even with some limitations) it is complicated
[0].  This was the motivation for implementing the adverb wl=. 104!:1 in
extended J.  Thus,

   '% *'eval
% *
   '% *'ae
% *
   '% *'wl
% *

So far everything is fine; but,

   'v=: % *'eval
% *
   v
% *
   erase'v'
1
   'v=: % *'ae
|domain error
|       a:@.a:

   'v=: % *'wl
   v
% *

   erase'v'
1

   u v
u v
   'u v'eval
|value error: v
|   u     v

   'u v'ae
u v
   'u v'wl
u v

   'u=. * %'eval
* %
   u
|value error: u
|[-0]

   'u=. * %'ae
|domain error
|       a:@.a:

   'u=. * %'wl
   u
* %


In other words, explicit definitions refer directly to arguments in a local
environment and an explicit (hybrid) writer has to worry about those issues.

Nevertheless, all this is beside the point that I was trying to make:
writing tacitly the common form of a conjunction taking two verbs directly
(as opposed to verb representations) is not possible (as far as I can see)
using the official J interpreter; not even for a simple conjunction that
produces a hook.

Pascal also wrote
"
   '*' (; v2c ) '%' `:6
* %
    '*' '%' (CONJ '; v2c') `:6
% *
    '*' '%' (CONJs '; v2c') (`:6)
* %
"

Further, one can obviously write the adverb a0=. `:6 such that:

   u`v a0
u v

Once an adverb is written in this common form it is straightforward to
write a related adverb (a1) that takes directly the two verbs in strand
form (abusing the concealed capabilities of evoke (`:6)):

   u v a1
u v

How?  Writing:  a1=. ((<'`')`)(`(<@:(5!:1)@:<'a0')) (`:6)

Writing (u v a1) to get (u v) almost defeats its purpose but (u v) in (u v
a1) is not a train:

   u (v a1)
u v
   (v a1)
(`v)(`:6)

Now after all some puzzling sentences follow: :D

   u v a0
u v
   u (v a0)
u v

   v a0
|value error: v
|[-13]
Finally, Pascal wrote:
"
]: is very interesting, though I'm still unsure that @: is a better
combiner than [:
"

Are you sure [: is a better combiner than @: ?


[0] Dan’s anonymous evoke

http://www.jsoftware.com/svn/DanBron/trunk/environment/anonymous_evoke2.ijs





On Wed, Aug 6, 2014 at 8:22 PM, 'Pascal Jasmin' via Programming <
[email protected]> wrote:

> thank you for sharing, Pepe
>
> your conj looks better for sure.
>
> thought, there is:
>
>    '*' (; v2c ) '%' `:6
> * %
>    '*' '%' (CONJ '; v2c') `:6
> % *
>    '*' '%' (CONJs '; v2c') (`:6)
> * %
>
>    '* %' eval
> * %
>
> where:
> CONJ =: 2 : ' u (v eval)'
> CONJs=: 2 : 'v eval u'
>
> these turn a conjunction into a "double adverb"
>
> ]: is very interesting, though I'm still unsure that @: is a better
> combiner than [:
>
>
>
>
> ----- Original Message -----
> From: Jose Mario Quintana <[email protected]>
> To: Programming forum <[email protected]>
> Cc:
> Sent: Wednesday, August 6, 2014 6:35:19 PM
> Subject: Re: [Jprogramming] parsing abuse, verb to conjunction
>
> Pascal wrote:
> "
> this adverb returns a conjunction which is designed to turn any dyadic verb
> into a conjunction
> "
>
> You might be interested to know that this is also what the adverb (conj)
> defined in [0] does; however, it is tacit, fixed and does not rely on
> linear representations which makes it immune to unwanted side effects and
> linear representations potential mishaps:
>
>    NB. v2c...
>
>    5 (, v2c) 3 (2 1 , v2c)  + 4
> 6 5 9 7
>
>    1 (4 :'x+y') 1
> 2
>    1 (4 :'x+y' v2c) 1
> 2
>    1 (4 :('assert. x>0';'x+y')) 1
> 2
>    1 (4 :('assert. x>0';'x+y') v2c) 1
> (1) (2 : 0) 1
> m 4 : 0
> assert. x>0
> x+y
> ) n
> )
>
>    NB. conj...
>
>    5 (, conj) 3 (2 1 , conj)  + 4
> 6 5 9 7
>
>    1 (4 :'x+y') 1
> 2
>    1 (4 :'x+y'conj) 1
> 2
>    1 (4 :('assert. x>0';'x+y')) 1
> 2
>    1 (4 :('assert. x>0';'x+y')conj) 1
> 2
>
> The primary objective for defining it (conj) was to produce, via wicked
> verbs, tacit conjunctions (which cannot be derived in the official version
> J).  For example, hook can be defined tacitly as a conjunction as follows:
>
>    hook=. train @: ; f.conj
>    * hook %
> * %
>
> Unfortunately, v2c cannot be used for that purpose:
>
>    hook=. train @: ; v2c
>    * hook %
> |value error: n
> |   m train@:;    n
>
> In the latest version of the extended J interpreter, not yet released,
> conj, adv, verb and train can be defined as follows:
>
>    an=. <@:((":0) ,&< ])       NB. Atomizing a noun (monadic verb)
>    fix=. (?:(f.an))            NB. Cloaking the adverb f. as a (monadic)
> verb
>    af=. an @: fix f.           NB. Atomizing after fixing (monadic verb)
>    ew=. adverb ?: (af'an')     NB. Encasing a word (adv)
>
>    ver=. ?: @: an f.           NB. Cloaking an adverb or conjunction as a
> verb (verb)
>    adv=. 1 ?: ((1 ?: an f.)ew) NB. Cloaking (the monadic variant of) a verb
> as an adverb (adv)
>    conj=. (2 ?: an) f.adv      NB. Cloaking (the dyadic variant of) a verb
> as a conjunction (adv)
>    train=. (`:6)ver            NB. Cloaking (`:6) as a verb
>
> Notice also that, in this latest version, ]: has been replaced by ?:.
> Why?  Because ]: has been re-implemented to emulate the adverb At defined
> in [1].  Thus, for example, one can now write:
>
>    [:u0 u1 u2 u3 u4]:
> u0@:u1@:u2@:u3@:u4
>
>    [:<./+/|-/~]:
> <./@:(+/)@:|@:(-/~)
>
>
> [0] Tacit recursion without $:
>
> http://www.jsoftware.com/pipermail/programming/2014-February/035416.html
> [1] Tacit recursion without $:
>    http://www.jsoftware.com/pipermail/programming/2014-March/035662.html
>
>
>
>
> >
> > ----------------------------------------------------------------------
> > 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

Reply via email to