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

Reply via email to