That is right; unfortunately x, y, u, v, m, and n are peculiar characters which
can explicitly strike back even if one tries to ignore them. Using your very
own anonymous evocation tool (
http://www.jsoftware.com/pipermail/programming/2007-November/008816.html ) as
an example:
ae =: ("_) (`(<1;~,'0')) (((<,':') <@:, (<1;~,'0') <@:, (,'0') <@:(;<)
,&>@:,@:(<^:(0=L.)))`) (`:6) ((<1;~,'0')`) (`:6)
x=. @[
y=. @]
'<y'ae NB. OK...
<@]
'<x'ae NB. Here it comes...
+-+
|1|
+-+
________________________________
From: Dan Bron <[email protected]>
To: General forum <[email protected]>
Sent: Tuesday, August 18, 2009 5:07:27 PM
Subject: Re: [Jgeneral] Looks like a bug in ".
David Mitchell wrote:
> I found these pages helpful as well as the excellent references above:
> http://www.jsoftware.com/help/jforc/parsing_and_execution_ii.htm
Wow, I really need to review J for C Programmers. It's a gold mine. Look:
> Avoid using the parameter names x, y, u, v, m, and n
> ... when an explicit definition is running, those names
> are always evaluated before they are put onto the stack
> (in other words, they are passed by value rather than
> by name, even if they are verbs). Therefore, they
> produce value error if they are undefined when used.
and I was citing some old J Forum post!
-Dan
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm