I don't really know what is meant by "a free variable of universal type". The thing is that J assumes an unknown name is a verb in a definition if it is not forced to use the name. But if the sentence it is in requires it to be used then it becomes an error. What Roger has to do when a name changes class I don't know and really don't care, just as long as the sentence executes properly with the new definition.
On Sun, May 17, 2009 at 7:18 PM, bill lam <[email protected]> wrote: > On Sun, 17 May 2009, Viktor Cerovski wrote: > > > > > > bill lam-2 wrote: > > > > > > On Sat, 16 May 2009, Tracy Harms wrote: > > >> invocation, and verbs must be defined prior to execution. > > > > > > IIRC undefined name are treated as verb. Suppose b is not yet defined, > > > > > > a=: 3 + b > > > a > > > 3 + b > > > b=: 1 > > > a 10 > > > |domain error: b > > > | a 10 > > > b=: *: > > > a 10 > > > 103 > > > > > It's a bit more complicated. b is more like a free variable of universal > > type, > > which means it can become anything: noun, verb, adverb or conjunction. > > > > Such semantics is unusual (I can think only of Mathematica here), > > and the up side is that some things, like mutually recursive verbs, or > > parametric verbs, are easy to define, but the down side is that we > > don't know whether some expression with such a free variable will become > > well formed in the course of further interpretation or not, just as your > > example > > illustrates. > > > > Another apparently similar, but meaningless, expression is: > > c=:d+1 > > |value error: d > > | c=: d+1 > > > > There ain't such thing as free variables in J evaluation stack. To see > why your expression raise an error, let's trace the immediate steps > using side effect > v1=: 1!:2&2 > c=: d v1 1 > 1 > |value error: d > | c=: d v1 1 > > the 4 entries in stack are > =: v v n > > so v n is immediately reduced to a another noun, and become > =: v n' > > now this should also be immediately reduced to yet another noun, but > since verb d is undefined, it can't proceed and thus raise an error. > > As you have already noted, current behavior allows forward reference > for verbs. > > Also a=: 3 + b will raise error in J504 because fork `n v v' is not > implemented. It is no difference from a=: 3 + * in that it is a syntax > error. > > -- > regards, > ==================================================== > GPG key 1024D/4434BAB3 2008-08-24 > gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3 > 唐詩125 孟浩然 與諸子登峴山 > 人事有代謝 往來成古今 江山留勝跡 我輩復登臨 > 水落魚梁淺 天寒夢澤深 羊公碑字在 讀罷淚沾襟 > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
