ref ← ##.mns defn ⍝ Make Namespace from association list ⍵.
[defn] is a "name association list" of the form ('name' class value), ···. The
result is a reference to a new namespace in which each name in the list has been
instantiated with its given class. The list may contain nested items with class=
9 to represent sub-spaces. The [mns] function was suggested by Paul Mansour.
Michael Baas suggests that if [class] is omitted it should default to 2, which
makes dealing with ⎕JSON data easier.
Technical note:
As [mns] is a utility function, it should be able to operate in an environment
with either index origin. However, the code may not localise and specify ⎕IO as
its value would be inherited by the namespaces it created. For this reason, the
code is written in an origin-independent way.
Examples:
alist ⍝ association list
┌─────────────┬────────────────────────────────────────────────────┬─────────────────────┐
│┌───┬─┬─────┐│┌───┬─┬────────────────────────────────────────────┐│┌────┬─┬────────────┐│
││mat│2│1 2 3│││sub│9│┌───────────────────┬──────────────────────┐│││spin│3│┌──────────┐││
││ │ │4 5 6│││ │ ││┌───┬─┬───────────┐│┌────┬─┬─────────────┐││││ │ ││spin←{⍉¨⍵}│││
│└───┴─┴─────┘││ │ │││dup│3│┌─────────┐│││oper│4│┌───────────┐│││││ │ │└──────────┘││
│ ││ │ │││ │ ││dup←{⍵ ⍵}││││ │ ││oper←{⍺⍺ ⍵}│││││└────┴─┴────────────┘│
│ ││ │ │││ │ │└─────────┘│││ │ │└───────────┘││││ │
│ ││ │ ││└───┴─┴───────────┘│└────┴─┴─────────────┘│││ │
│ ││ │ │└───────────────────┴──────────────────────┘││ │
│ │└───┴─┴────────────────────────────────────────────┘│ │
└─────────────┴────────────────────────────────────────────────────┴─────────────────────┘
tree mns alist ⍝ show fixed ns.
#.[Namespace]
· ~ mat
· ∇ spin
· sub
· · ∇ dup
· · ∘ oper
(mns alist).(spin sub.(dup oper) mat) ⍝ check it out.
┌───┬───┐
│1 4│1 4│
│2 5│2 5│
│3 6│3 6│
└───┴───┘
See also: rep
Back to: contents
Back to: Workspaces