⍝ defs:
:ReturnIf 3≠ ⎕nc'⎕SE.Dyalog.Utils.repObj' ⍝ required library fn
⎕ex'Alpha' ⍝ remove alias for 1
⎕ex (~∘' '¨ ↓⎕nl 3 4)~'defs' 'disp' 'externs' 'in' ⍝ declutter for speed
dup←{⍵ ⍵} ⍝ single-line defn
tup←{ ⍝ multi-line defn
⍵ ⍵ ⍵
}
avg ← (sum←(plus←+)(fold←⌿)) ÷ (num←≢) ⍝ more definitions ...
davg ← {(sum÷num)⍵} ⍝ dfn
each ← {⍺←⊢ ⋄ ⍺ ⍺⍺¨⍵} ⍝ dop
dups ← dup each ⍝ derived fn
tups ← tup each
isns ← (ns←⎕ns'')∘≡
isnum ← ∊∘(digs←'0123456789') ⍝ named array comp
vowel ← ∊∘'AEIOU' ⍝ unnamed array comp
same ← (succ←one∘plus)∘(pred←-∘(one←1))
that ← {this ⍵} ⍝ mutually recursive
this ← {that ⍵} ⍝ dfns
F ← 32∘plus∘(×∘1.8) ⍝ Fahrenheit
inv ← ⍣¯1 ⍝ derived operator
C ← F inv ⍝ → derived fn
defs'avg' ⍝ no-names listing
avg ← +⌿÷≢
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ Listing with names
2 defs '' ⍝ all names / all defns
C ← F inv
F ← 32∘plus∘(×∘1.8)
avg ← sum÷num
davg ← {(sum÷num)⍵}
digs ← '0123456789'
dup ← {⍵ ⍵}
dups ← dup each
each ← {⍺←⊢ ⋄ ⍺ ⍺⍺¨⍵}
fold ← ⌿
inv ← ⍣¯1
isns ← ns∘≡
isnum ← ∊∘digs
num ← ≢
one ← 1
plus ← +
pred ← -∘one
same ← succ∘pred
succ ← one∘plus
sum ← plus fold
that ← {this ⍵}
this ← {that ⍵}
tups ← tup each
vowel ← ∊∘'AEIOU'
2 defs 'same' 'succ' 'pred' ⍝ display of specific definitions
same ← succ∘pred
succ ← one∘plus
pred ← -∘one
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ Top-down indented display:
1 1 defs 'avg' ⍝ top-down defns of "avg"
avg ← sum÷num
sum ← plus fold
plus ← +
fold ← ⌿
num ← ≢
2 1 defs '' ⍝ all defns top-down
C ← F inv
F ← 32∘plus∘(×∘1.8)
plus ← +
inv ← ⍣¯1
avg ← sum÷num
sum ← plus fold
fold ← ⌿
num ← ≢
davg ← {(sum÷num)⍵}
dups ← dup each
dup ← {⍵ ⍵}
each ← {⍺←⊢ ⋄ ⍺ ⍺⍺¨⍵}
isns ← ns∘≡
isnum ← ∊∘digs
digs ← '0123456789'
same ← succ∘pred
succ ← one∘plus
one ← 1
pred ← -∘one
tups ← tup each
vowel ← ∊∘'AEIOU'
that ← {this ⍵}
this ← {that ⍵}
avl←{(⍳×/1↓⍴⍵)~⍵×⊃⍺⌷⍺⍺} ⍝ some more dfn/op defns
box←{⍵⌿⍵/⍵ ⍵⍴⍳⍵×⍵}
cmap←{⊂[⍳⍴⍴⍵]1∊¨⍵∘.=⍵}
emt←{(,⍵=0)/,⍳⍴⍵}
nxt←{(⍺(⍺⍺ avl)⍵)⊣@(⊂⍺)¨⊂⍵}
nxtv←{⊃,/⍺∘(⍺⍺ nxt)¨⍵}
rcb←{(⍳⍵),¨box⊃⍵*÷2}
sfmt←{⊂[3 4]1 3 2 4⍉(2/(⍴⍵)*÷2)⍴⍵}
sudoku←{sfmt⊃cmap∘rcb svec ⍵}
svec←{⊃(⍺⍺⍴⍵)nxtv/(emt ⍵),⊂⊂⍵}
1 1 defs 'sudoku' ⍝ top-down display
sudoku ← {sfmt⊃cmap∘rcb svec ⍵}
sfmt ← {⊂[3 4]1 3 2 4⍉(2/(⍴⍵)*÷2)⍴⍵}
cmap ← {⊂[⍳⍴⍴⍵]1∊¨⍵∘.=⍵}
rcb ← {(⍳⍵),¨box⊃⍵*÷2}
box ← {⍵⌿⍵/⍵ ⍵⍴⍳⍵×⍵}
svec ← {⊃(⍺⍺⍴⍵)nxtv/(emt ⍵),⊂⊂⍵}
nxtv ← {⊃,/⍺∘(⍺⍺ nxt)¨⍵}
nxt ← {(⍺(⍺⍺ avl)⍵)⊣@(⊂⍺)¨⊂⍵}
avl ← {(⍳×/1↓⍴⍵)~⍵×⊃⍺⌷⍺⍺}
emt ← {(,⍵=0)/,⍳⍴⍵}
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ Bottom-up dependencies:
2 ¯1 defs 'plus' ⍝ defns dependent on "plus"
plus ← +
F ← 32∘plus∘(×∘1.8)
C ← F inv
succ ← one∘plus
same ← succ∘pred
sum ← plus fold
avg ← sum÷num
2 ¯1 defs 'one' 'plus' ⍝ defns dependent on "one" and "plus"
one ← 1
pred ← -∘one
plus ← +
F ← 32∘plus∘(×∘1.8)
C ← F inv
succ ← one∘plus
same ← succ∘pred
sum ← plus fold
avg ← sum÷num
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ changing definitions:
defs 'plus ← -∘-' ⍝ redefinition of "plus"
0 defs 'same' ⍝ change to "plus" has changed "same"
same ← 1∘(-∘-)∘(-∘1)
0 defs defs 'div←÷' ⍝ new definition "div"
div ← ÷
1 defs 'avg' ⍝ incorporates new defn
avg ← sum div num
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ -ive names: tree only
¯1 defs ⊂⎕cr'succ' ⍝ ]box -names=fns
┌─┬────────┐
│1│┌─┬────┐│
│ ││∘│plus││
│ │└─┴────┘│
└─┴────────┘
¯2 defs ⊂⎕cr'succ' ⍝ ]box -names=all
┌───┬────────┐
│one│┌─┬────┐│
│ ││∘│plus││
│ │└─┴────┘│
└───┴────────┘
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ edge cases
∧/{(0 0⍴'')≡ ⍵ defs'undef'}¨ ,0 1∘., 0 ¯1 1 ⍝ undefined name
1
avg ← {sum←+⌿⍵ ⋄ sum÷≢⍵} ⍝ avg with local name "sum"
1 1 defs 'avg' ⍝ top-down display does not include "sum"
avg ← {sum←+⌿⍵ ⋄ sum÷≢⍵}
(0 0⍴'')≡ 1 1 (⎕ns'')defs '' ⍝ empty namespace
1
⍝∇ defs in externs
Back to: code
Back to: Workspaces