cvec ← {path←⎕path} ##.ncpath names ⍝ ⎕path-aware ⎕nc. Suggested by Mark Johns, this function searches namespaces in its left argument (default ⎕PATH) for functions and operators named in its right argument. Right argument [names] is a simple character matrix, vector or scalar, suitable as a right argument for ⎕NC. For each name found along the [path], [ncpath] reports: 3 for a function, 4 for an operator and 0 otherwise. Note that this function ignores names with a class other than 3 or 4. Bugs: This rather simple coding of the function does not cope with the special ⎕path entry: '↑'. We could arrange to have it substitute occurrences of '↑' in ⎕path with an appropriate sequence '## ##.## ##.##.## ···'. The following expression returns such a sequence: {⍺,'.',⍵}\{'##'}¨(⎕cs'')∩'.' (muse: Remember that operators may take arrays, as well as functions, as operands. We could choose to extend primitive operator each (¨) to "apply" an array operand to each item of its argument. Then sub-expression {'##'}¨ above could be replaced with just '##'¨. '##'¨ '...' ┌──┬──┬──┐ │##│##│##│ └──┴──┴──┘ 0¨⍳2 3 0 0 0 0 0 0 ) Examples: ncpath'display' ⍝ display is a function. 3 notes.⎕nc'display' ⍝ display is a variable in notes. 2 notes ncpath'display' ⍝ no display function in notes. 0 ncpath↑'display' 'rows' ⍝ rows is an operator. 3 4 ⎕path←'⎕se' ⍝ set ⎕path for utility fns. ⎕se.dup←{⍵ ⍵} ⍝ make a duplicator fn in ⎕se. dup 33 ⍝ function reference using ⎕path. 33 33 ⎕nc'dup' ⍝ no dup in current space. 0 ncpath'dup' ⍝ dup is a fn somewhere on ⎕path. 3 See also: refs Back to: contents Back to: Workspaces