──────────
Namespaces
──────────
Code that traverses a namespace structure, must  make  special  arrangements  to
avoid the unbounded recursion that could occur if a space contained a  reference
to one of its ancestors.  Function →refs← maintains a  list  of  spaces  already
visited and refrains from revisiting  any  already in the list.  Function →tree←
just  "gives up"  when it encounters a ref that 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