I'm not sure what the rule is, but if you do:

g =: ]
a =: 1 : 0
h =. u
g =. +:
h y
)

g a 1

NB. what is g?
g
it shows g as ], 
i.e Global g doesn't get reassigned.

Also,
g =: ]
a =: 1 : 0
g =. u
g y
)

^ a 1

NB. what is g?
g

shows ], 
so global g doesn't get reassigned here either. But the g in the line "g y" is 
^ , i.e. a ignores the locally defined g.

Sorry that's not helpful. The dictionary entry for explicit definitions [1], 
doesn't seem to have much to say about it.

Interestingly, if you erase g inside the conjunction ([2]), and then assign 
local g, you will still get a stack error:

g =: ]
a =: 1 : 0
(4!:55) <'g'
g =. u
g y

)

g a 1




[1] http://www.jsoftware.com/help/dictionary/d310n.htm
[2] http://www.jsoftware.com/help/dictionary/dx004.htm
--------------------------------------------
On Fri, 11/4/16, Xiao-Yong Jin <[email protected]> wrote:

 Subject: [Jprogramming] stack error or private/public name collision
 To: [email protected]
 Date: Friday, November 4, 2016, 1:52 PM
 
 Is the following a bug?
 
    g=:]
    a=:1 :0
 g=.u
 g y
 )
    g a 1
 |stack error: g
 |       g y
    a=:1 :0
 f=.u
 f y
 )
    g a 1
 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

Reply via email to