rslt ← (fn ##.vwise) ref ⍝ Variable-wise: apply ⍺⍺ to each var in space ⍵. Suggested by Paul Mansour, [vwise] applies its operand function to each variable in the namespace referenced by right argument ⍵. Note that any non-primitive functions in vwise's operand will execute in the _calling_, rather than the _target_ space. Paul suggests some related operators: "Furthermore, we need a way to operate on each sub namespace in a namespace, which suggests swise, or "space wise": swise←{ ⍝ Space wise ⍺⍺¨refs ⍵ ⍝ Apply to each space } It is convenient to have variations of these operators that do replacement: vwiser←{ ⍝ Var wise, with Replacement n←↓⍵.⎕NL 2 ⍝ Var Names v←⍺⍺¨⍵∘⍎¨n ⍝ Apply to each ⍵⊣n ⍵.{⍎⍺,'←⍵'}¨v ⍝ Reset vars } and swiser←{ ⍝ Space wise with replacement ↑⍺⍺¨refs ⍵ ⍝ Apply to each space } Note that we could have one version of each operator and control their behavior with a left argument, but this increases the complexity of the syntax when call- ing them. With operator "saw" (simple-array-wise) and these new operators, we can get to work on an arbitrary namespace structure. Here is an example that finds and re- places "words" in each simple text vector of a namespace ns: f←ft rt∘ssword ⍝ Find and replace g←f saw ⍝ ... in each simple array h←g vwiser ⍝ ... in every variable h swiser ns ⍝ ... in every space where ft is the find text, rt is the replace text, and ssword is a slightly re- worked version of its DFNS namesake. Or simply rotate every variable in and under namespace A: ⌽ vwiser swiser A or display the contents all variables in and under A: ⊢ vwise swise A It appears vwise and swise are used in together a lot, so it might be useful to combine them in a single operator: vswise←{ ⍝ Var and Space Wise ⍺⍺ vwise swise ⍵ ⍝ ... } and vswiser←{ ⍝ Var and Space Wise ⍺⍺ vwiser swiser ⍵ ⍝ ... } Count the number of simple matrices in every item of every variable in and under A: +/∊{2=⍴⍴⍵}saw vswise A Rotate every matrix, simple or nested, in and under A: {2=⍴⍴⍵:⌽⍵ ⋄ ⍵} vswiser A Examples: +/{82=⎕dr ⍵}vwise notes ⍝ number of simple char vars in #. 150 ∧/{⍵≡vtrim ⍵}vwise notes ⍝ check that all notes have been trimmed. 1 ~1∊(' ',⎕tc)∊{⊃⌽⍵}vwise notes ⍝ check no trailing white space in notes. 1 ∪{⊢⎕cs''}vwise notes ⍝ operand function runs in calling space. # See also: refs xrefs saw Back to: contents Back to: Workspaces