For those interested, I've created an adverb like f. which fixes only local
names:
NB. Put the following lines in a script (separate file):
local =. +
global =: -
r =. global local %
f =: r fl
g =: (global local r global -) fl
NB. End of script
load 'name_of_your_script.ijs'
f
global + %
g
global + (global + %) global -
require 'strings'
# 1 : ('w=.[: u&.> cut';'w ')
|value error: w
# 1 : ('w=.[: u&.> cut';'w f.')
[: #&.> 3 : ''' ''&$: :([: -.&a: <;._2@,~) y' :(4 : 'x '' ''&$: :([:
-.&a: <;._2@,~) y')
# 1 : ('w=.[: u&.> cut';'w fl')
[: #&.> cut
See the postscript for the current definition. Right now, you can only my
adverb to fix verbs, because string arguments (a la
'name' fl ) are not yet supported. Should anyone show interest, when JAL
officially comes out, I'll supply a better written
and documented version as an addon.
-Dan
PS: See http://www.jsoftware.com/svn/DanBron/trunk/environment/namescope.ijs
for a script complete with comments.
fl =: `({.;:'Peel') (resolve`) (`:6) (5!:0)
resolve =: >@:peel^:({.@:ns_isLOCAL :: 0:) L: 0^:_
Peel =: 1 : 'peel ''u'' ' NB. ' > {. u`[ '
peel =: [: ". '{. 5!:1 {. ;: '' ' , '''' ,~ ]
ns_isLOCAL =: 2 = ns
ns =: #.@:nameScope
nameScope =: (( (~: ,. *.&:(~:&_1)) ({~ i.&1@:~:&_1 <. _1 + #)"1 )&:
(([ #!._1^:_1: 15!:6@:# )"1~ _1 < nc) [: ;&.> @:{ 1j1
1j1
#!.(<<'_') ] ,&< (, |.@:copath)@:coname@:(''"_) )@:
(;:^:(0 = L.))
Caveat: You'll notice the current version of nameScope uses the
undocumented foreign 15!:6 . It's not __neccesary__ to do
it this way, but the "supported" methods (that I can think of) are much
messier. Again, if there's interest, I can change this.
As it stands, however, the definition uses the undocumented foreign, which
means there is no guaruntee that it'll work in future
versions of J (though 15!:6 is unlikely to be revoked because it's required
for JMF). Also, since the 15!: family mucks with
memory, a small slip (in either its implementation or its use) can crash J. I
don't think there are circumstances under which fl
will crash J, but you've been warned.
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm