>    NB.  Looks like there is a bug in ".

This isn't a bug in  ".  (nor is it a bug in  ~  as I once surmised [1]).

The behavior is explained in the "stacking by name" thread [2].  The
special local names  x y u v m n  are stacked by value.  

That is, when one of these names is encountered in a local context, its
value is evoked immediately.  This causes a problem when the name in
question doesn't have a value.  The result is a value error, as in your
example.

Here's a simpler demonstration, which doesn't make use of  ".  (or  ~  etc):

           foo_V =: 3 : 0
              dummy =. V/   NB.  Note capital V is not a special name
              3             NB.  Return constant 3
        )
           foo_v =: 3 : 0
              dummy =. v/   NB.  Note lowercase v *is* a special name
              3             NB.  Return constant 3
        )
           
           foo_V ''
        3
           foo_v ''
        |value error: v
        |   dummy=.    v/
           
This behavior (stacking special names by value) is practical and you've
enjoyed the benefit of it many times, without knowing it.  The suggestion
has been made to extend the behavior to all local names, rather than
limiting it to the special names [3].

-Dan

[1]  http://www.jsoftware.com/jwiki/System/Interpreter/Bugs#evokelocalnames 
     and more discussion at
     http://www.jsoftware.com/jwiki/DanBron/Temp/IsEvokeBroken

[2]  http://www.jsoftware.com/pipermail/programming/2009-August/015914.html

[3]  http://www.jsoftware.com/pipermail/beta/2006-April/000840.html and at
[1] too.


----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to