⍝ 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
┌⊖┐
│ │
└─┘

Back to: code

Back to: Workspaces