──────────
Namespaces
──────────
With  the  advent  of  namespace  references  (refs)  in version 9.0, code which
traverses  a  namespace  structure,  must make special arrangements to avoid the
"infinite"  recursion  that  may occur if a space contains a reference to one of
its ancestors. The way of avoiding this problem, used by the →refs← function, is
to  maintain  a  list of spaces already visited, and so avoid visiting any space
more  than  once.  Alternatively,  the  →tree←  function just "gives up" when it
encounters a ref which is not an immediate child of the current space.

Example:

      )ns x
#.x
      x.ref←x               ⍝ cyclic ref

      x.ref
#.x
      x.⎕nl 9
ref
      x.ref.⎕nl 9
ref
      x.ref.ref.⎕nl 9
ref
      x.ref.ref.ref.ref
#.x

      tree x                ⍝ →tree← function "gives up" on cyclic refs.
#.x
·   ref → #.x

      refs x                ⍝ →refs← function visits each space exactly once.
 #.x

See also: refs tree xrefs

Back to: contents

Back to: Workspaces