kinds ← ##.kind namelist ⍝ Parse-category of name(s) ⍵. A necessary and sufficient prerequisite for parsing an APL expression is to cat- egorise any _names_ into one of four "kinds" depending on their referent values: 1: Nilad (array, namespace or niladic function), 2: Function (non-niladic), 3: Monadic-operator, 4: Dyadic-operator. A value of 0 is returned for an undefined name. The expression (X Y Z) could be parsed in several ways depending on the kinds of X, Y and Z. Here are just two possibilities: X Y Z → ┌┴─┐ ⍝ X:function Y:dyadic-operator Z:nilad cf: +∘1 2 4 1 X ┌┴┐ ¯¯¯¯¯¯ Y Z X Y Z → ┌┴─┐ ⍝ X:function Y:monadic-operator Z:nilad cf: ⍴¨2 2 3 1 ┌┴┐ Z ¯¯¯¯¯¯¯ X Y Function →parse← illustrates the syntax trees: scripts._dyalog parse'+∘1' ⍝ +∘1 → +(∘1) right-operand currying F ┌┴─┐ + ┌┴┐ ∘ 1 scripts._dyalog parse'⍴¨1' ⍝ ⍴¨1 → (⍴¨)1 app of derived fn to arg A ┌┴─┐ ┌┴┐ 1 ⍴ ¨ Dyalog's four hybrid tokens: / ⌿ \ ⍀ may be assigned a name. [kind] classifies such names as 2.5 though their effective kind will be determined dynamically at run-time. slash ← / ⍝ naming of hybrid token 1 2 slash¨ 3 4 ⍝ slash interpreted as function:2 ┌─┬───┐ │3│4 4│ └─┴───┘ +slash 1 2 3 4 ⍝ slash interpreted as operator:3 10 kind'slash' ⍝ [kind] categorises slash as hybrid:2.5 2.5 Examples: (kind,⊢) 'qqq' 'notes' 'gcd' 'saw' 'at' ⍝ names from this ws 0 qqq 1 notes 2 gcd 3 saw 4 at (↑ ⍋ ⊃¨∘⊂ ↓) ,∘≢⌸ kind ⎕nl ⍳10 ⍝ number of nilads, fns, mops and dops in ws 1 2 2 200 3 40 4 21 kind ⎕fx'nilfn' '' ⍝ niladic function parsed as nilad 1 slash←/ ⋄ kind'slash' ⍝ kind of hybrid 2.5 See also: kk See also: http://www.dyalog.com/blog/2015/06/response-to-name-colouring-for-dfns Back to: contents Back to: Workspaces