⍝ Kind Koloring of d-fnop named ⍵:
∆←{⎕IO←0 ⍝ colouring of segs ⍵
0⊣⎕EX fnop←'fnop': ⍝ local name "fnop"
⍎'fnop←{',⍵,'} ⋄ 0': ⍝ local fnop←{...}
xk←(,¨'NFMD')(1 2 3 4) ⍝ simulated external kinds
cv←⊃⍎'xk kk''fnop''' ⍝ colour vector
(6↑''),6↓¯1↓cv ⍝ alignment
} ⍝ :: Kmap ← ∇ Body
∆'a←⍺ ⋄ b←⍵ ⋄ a+b' ⍝ local a and b : nil
N·····N·····N·N
∆'sum←+/⍵ ⋄ num←≢ ⋄ (sum÷num)⍵' ⍝ (sum÷num) : fun
NNN·······FFF·····FNNN·FFFF·
∆'sum←+/⍵ ⋄ num←≢⍵ ⋄ (sum÷num)' ⍝ (sum÷num) : nil
NNN·······NNN······NNNN·NNNN
∆'a(b(c d))←((e f)g)h←⍵' ⍝ struct and multiple assignment
N·N·N·N·····N·N·N·N··
∆'vec[vec←⍵]' ⍝ indexing
NNN·NNN···
∆'vec[vec←⍵]←⍵' ⍝ indexed assignment
NNN·NNN·····
∆'mop←{⍺⍺}' ⍝ monadic operator
MMM·M··M
∆'dop←{⍵⍵}' ⍝ dyadic operator
DDD·D··D
∆'nil←{⍵}⍵' ⍝ applied fn returns nil
NNN·F·F·
∆'nil←1+2+3 ⋄ fun←1+2+-' ⍝ array v train
NNN·········FFF······
∆'nil←⍺⍺ 0 ⋄ fun←⍵⍵ +' ⍝ array v train
NNN········FFF····
∆'nil←N N ⋄ mop←D F ⋄ dop←D ⋄ fun←F M F' ⍝ various expressions
NNN·N·N···MMM·D·F···DDD·D···FFF·F·M·F
∆'nil←N D F N' ⍝ needs BG parsing?
NNN·N·D·F·N
∆'((1))' ⍝ nested parens
NN·NN
∆'qqq←+ ⋄ nil←{qqq}0 ⋄ fun←{qqq} ⋄ qqq←0' ⍝ deferred fn evaluation
FFF·····NNN·FFFFF····FFF·FNNNF···NNN··
∆'aaa←(bbb←0)' ⍝ assignment expression
NNN·NNNN··N
∆'(# #).(⍺+.×⍵)∘.,0' ⍝ space-ref and products
N···N·N·····N····
∆'nil←(+)1' ⍝ parenthises fn
NNN·F·F·
∆'((x[0+0])⊃x)←0' ⍝ selective assignment
·NN·····N·N···
∆'(0/1,v)←1' ⍝ selective assignment
·····N···
∆'nil←⍺' ⍝ alpha default
NNN··
∆'⍺←0 ⋄ nil←⍺' ⍝ alpha assignment
······NNN··
∆'⍺←⊢ ⋄ rnd←⍺' ⍝ alpha assignment
······rrr··
∆'nil←0/¨0 ⋄ nil←+/¨0' ⍝ hybrid
NNN········NNN·····
∆'zzz←⍎⍵' ⍝ execute can return a fn
rrr···
∆'this←+ ⋄ ⍵:this←0 ⋄ this' ⍝ guarded expr: envt unaltered
FFFF·······NNNN·····FFFF
∆'⍺{⍺⍺ ⍵}{⍺ ⍺⍺ ⍵⍵ ⍵}⍵⍵⊢⍵' ⍝ example from Cut operator
·M····MD·········D····
show←{↑↑,/(⎕NR ⍵){⍺ ⍵}¨⍺⍺ ⍵} ⍝ interleaved lines and colours
kk show'show' ⍝ selfie
show←{↑↑,/(⎕NR ⍵){⍺ ⍵}¨⍺⍺ ⍵}
MMMM·M····N·····NF···F·····M
kk show'∆' ⍝ colouring of colouring fn
∆←{⎕IO←0 ⍝ colouring of segs ⍵
F·F······························································
0⊣⎕EX fnop←'fnop': ⍝ local name "fnop"
··············NNNN·················································
⍎'fnop←{',⍵,'} ⋄ 0': ⍝ local fnop←{...}
··································································
xk←(,¨'NFMD')(1 2 3 4) ⍝ simulated external kinds
········NN·N········NN·······N············································
cv←⊃⍎'xk kk''fnop''' ⍝ colour vector
········rr·····················································
(6↑''),6↓¯1↓cv ⍝ alignment
········N····N······rr·····································
}
····F
⍝ The following test checks that kk's internal table is up to date:
vv←(∪⎕ucs 2031⌶6)~'01 .→←⎕⍞À()[];⍝⋄:{}' ⍝ list of primitive tokens
⎕fx{(⊂'jj←{'),⍵,'}'}'x←'∘,¨vv ⍝ fn jj assigns name to each
display('?'=⊃¨1↓¯1↓kk'jj')/vv ⍝ check for any new ones
┌⊖┐
│ │
└─┘
⍝∇ kk kind tokens display
Back to: code
Back to: Workspaces