Yeah, that's the standard approach.  

In general, unlike explicit code, tacit code does not introduce a new
explicit context (local namespace), and so it operates within (and can
interact with) an explicit caller's local namespace (i.e. the anonymous
temporary namespace created upon entry to the explicit caller).  

That's one driver behind tools like anonymous evoke, etc.

-Dan

PS:  Now you want a fun challenge?  Write a verb, which, given a name,
determines whether that name is local or global (i.e. was assigned with =.
or =: ). It's possible, and has its uses.

----- Original Message ---------------

Subject: Re: [Jprogramming] copula
   From: "'Pascal Jasmin' via Programming" <[email protected]>
   Date: Wed, 11 Jun 2014 06:48:44 -0700 (PDT)
     To: "[email protected]" <[email protected]>

> it's possible to emulate them as used-defined utilities (eg asgn=:dyad def 
> '(x)=:y' or '(y)=:y~' for things like += etc). 

good explanation, but something missing from J is the ability to use those
tricks with =. affecting the caller. Though this topic comming up finally
led me to a solution:

   lr 
3 : '5!:5 < ''y''' 

lassign =:  4 : ' x , ''=. '', lr y ' (".@:)

   'a' lassign 3 
3 
   a 
3 

   f =: 3 : ' +: a [ ''a'' lassign y' 6
   f 6 
12 
   a 
3 




----- Original Message -----
From: Dan Bron <[email protected]>
To: "[email protected]" <[email protected]>
Cc: 
Sent: Wednesday, June 11, 2014 9:19:29 AM
Subject: Re: [Jprogramming] copula

If copulas were verbs, what would happen here?

   count=:77
   msg=:'count'
   msg=:msg,': ',":count

Or, better yet:

   count=: count +1

Similar remarks apply to the question of whether copulae should be adverbs
or conjunctions. In short: in order to see a /name/ on the left, as
opposed to a /value/, copulae need a special parsing rule with higher
precedence (binding power) than any nameclass. Which means copulae can't
operate "normally" (as expected, ie name=:value) and also participate as
one of the kinds of names (nameclasses) it can assign, or bind.

With that said, it's possible to have a different set of copulae, distinct
from =: and =., that act like verbs (or adverbs, or conjunctions), and do
what you want, so long as you can live with the limitation that this
lower-power kind of copula cannot, itself, assign verbs (respectively,
adverbs or conjunctions).

I don't we will ever implement these as primitives in the language, but
it's possible to emulate them as used-defined utilities (eg asgn=:dyad def
'(x)=:y' or '(y)=:y~' for things like += etc).

-Dan

Please excuse typos; sent from a phone.

> On Jun 11, 2014, at 9:00 AM, David Lambert <[email protected]> wrote:
> 
> I'd like to know the reasoning that copula are not verbs please.
> 
>   B
> |value error: B
> 
>   (=:~ ('A B C ' {.~ +:@#))i.2
> |syntax error
> |   (=:    ~('A B C '{.~+:@#))i.2
> 
> 
>   assign=: 4 :'EMPTY [ (x)=: y'
> 
>   (assign~ ('A B C ' {.~ +:@#))i.2
> 
>   B
> 1
> 
> ----------------------------------------------------------------------
> 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