Raul Miller <rauldmiller@...> writes:
> Have you read the second paragraph here:
> http://www.jsoftware.com/help/dictionary/d001.htm
>
> or footnote 3, here:
> http://jsoftware.com/help/dictionary/d310n.htm
Yes, I have read these passages several times...
>
> ?
>
> My reading of these two concepts suggests that x and y are sometimes
> prohibited as global names. And, it's easy enough to conduct an
> experiment to test this concept:
No. The way I understand it is that, once you define a name as local using the
local copula ('=.'), you may not use the global copula ('=:') to assign a value
to it. Within a verb's definition, the local copula is automatically provided
for one or more of {x, y, m, n, u, v} depending on contextual considerations.
>
> 3 :'y=:0' 0
> |domain error
> | y =:0
>
> So it looks to me as if the implementation matches the dictionary...
Again, no. The error in the case you have presented is instructing you that
you
have used incorrect syntax; there is a superfluous 0 at the end of the sentence
which is outside the script.
But, you are on the right path... if you try to make a global assignment to y
*from within* your verb definition, you will get an error. That is stipulated
in the Dictionary. When your verb is defined, it is automatically allocated a
local variable y (and perhaps others as well -- x, m, etc.). Because of this,
you may not -- from within the function -- use a global copula to assign a
value
to y.
However, in an interactive session, you may have reason to define a global y.
Indeed, this is permissible by the language. And even namelist, a prominent
verb of the language, correctly reports its existence.
>
> Yes, originally, the language used x. y. u. v. m. n.
>
> However, this caused problems with the syntax for locales.
Aha! Thank you for this insight! I supposed that there was a logical
explanation.
> Arguably, the fault is in the syntax for locales rather than in those
> names. That said, changing how locales work would have been a huge
> change and may have introduced additional issues.
Understood.
> So, if we went back to the old way of doing things, and if y. is a
> reference to an object, how do we access the object?
I will need to study this area more... but I do know this: we can still use
x.,
y., m., n., u. and v. All we need to do is to use the !: foreign conjunction
(i.e., 9!:49).
> Anyways, consistency is only good when it achieves something useful.
> Language implementations routinely break consistency when the language
> implementer deems the issue worthy. Thus, for example, in C, you
> cannot do:
>
> int default= 0;
>
Of course I cannot make that assignment, since *default* is a reserved word in
C. Yet, again, I will beg to differ with you on the point of consistency.
Consistency is always good when it comes to language design/implementation.
Breaking rules should only be done when necessary.
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm