⍝ Total array ordering: ⍺≤⍵
2 le 3 ⍝ simple scalar comparison: 2≤3 → 1
1
4 le ,3 ⍝ items 4>3 more significant than rank
0
3 le ,3 ⍝ items match: rank decides
1
1 2 le 1 1 3 ⍝ short array extended with fill items
0
1 1 0 le 1 1 ⍝ items match (after fill): initial shape decides
0
1 2 3 9 le 2 3⍴⍳6 ⍝ same as (2 4↑1 4⍴1 2 3 9) le (2 4↑2 3⍴1 2 3 4 5 6)
0
(⍳2 2) le ⌽⍳2 2 ⍝ nested
1
3 le '3' ⍝ num >> char
0
''le ⍬ ⍝ comparison of nulls => comparison of prototypes.
1
'k'9 le 4't' ⍝ mixed arrays
1
nss ← ⎕ns¨'' '' ⍝ pair of "equal" namespaces.
le/nss ⍝ identical.
1
nss.v←'world' 'hello' ⍝ distinguishing values.
le/nss ⍝ distinct.
0
'temp'⎕ns'' ⍝ temp space
temp le ⎕or'temp' ⍝ namespace vs ⎕OR of namespace.
1
le/⎕or¨'test' 'le' ⍝ function ⎕OR comparison
0
le/¨1 0⌽¨⊂{⍵.ref←⌽⍵}⎕ns¨'' '' ⍝ ref-cycle detection.
1 1
Q←{1≥≢⍵:⍵ ⋄ s←⍵ ⍺⍺ ⍵⌷⍨⊂?≢⍵ ⋄ (∇ ⍵⌿⍨0>s)⍪(⍵⌿⍨0=s)⍪(∇ ⍵⌿⍨0<s)} ⍝ (RKWH)
qsort←{⍺⍺{(⍵ ⍺⍺ ⍺)-(⍺ ⍺⍺ ⍵)}⍤¯1 999 Q ⍵}
display le qsort 3(,3)'3'(,'3') ⍝ char << num; scalar << vector
┌→────────────┐
│ ┌→┐ ┌→┐ │
│ 3 │3│ 3 │3│ │
│ - └─┘ └~┘ │
└∊────────────┘
ip←+.× ⍝ named function.
stuff ← ⎕SE ⍬ # (⎕or'ip') '' ⍬ ⍝ assorted stuff.
display le qsort stuff ⍝ sorted stuff.
┌→────────────────────────┐
│ ┌⊖┐ ┌⊖┐ ┌⊖┐ ┌───┐ │
│ │ │ │0│ │0│ # ⎕SE │+.×│ │
│ └─┘ └~┘ └~┘ └∇──┘ │
└∊────────────────────────┘
⍝ Other relationships can be derived from le:
cmp ← {⍺⍺/le/¨1 0⌽¨⊂⍺ ⍵} ⍝ comparison
ge ← ≥cmp ⍝ greater or equal
eq ← =cmp ⍝ equal
ne ← ≠cmp ⍝ not equal
lt ← <cmp ⍝ less than
gt ← >cmp ⍝ greater than
(⎕ns'')eq ⎕ns'' ⍝ distinct spaces deemed equal.
1
∘.ge⍨ 0 1 ⍝ truth-table for ≥
1 0
1 1
grade←{| ⊢/↑ ⍺⍺ qsort ⍵ {⍺ ⍵}¨ ⍵⍵ ⍳⍴⍵} ⍝ grade up/down.
gu ← le grade + ⍝ grade-up ⍋
gd ← ge grade - ⍝ grade-down ⍒
gu 3 1 4 1 5 ⍝ grade-up of numeric vector.
2 4 1 3 5
gd 3 1 4 1 5 ⍝ grade-down of numeric vector.
5 3 1 2 4
display stuff ⍝ assorted stuff.
┌→────────────────────────┐
│ ┌⊖┐ ┌───┐ ┌⊖┐ ┌⊖┐ │
│ ⎕SE │0│ # │+.×│ │ │ │0│ │
│ └~┘ └∇──┘ └─┘ └~┘ │
└∊────────────────────────┘
gu stuff ⍝ grade-up of stuff.
5 2 6 3 1 4
gd stuff ⍝ grade-down of stuff.
4 1 3 2 6 5
q ← 'to' 'be' 'or' 'not' 'to' 'be' ⍝ that is the question.
gu q ⍝ grade-up of char vectors ...
2 6 4 3 1 5
⍋∘↑ q ⍝ ... concurs with ⍋∘↑
2 6 4 3 1 5
nvs ← (1 1) ⍬ (2 3 4) (1 1) ⍬ (2 3) ⍝ numeric vectors.
gd nvs ⍝ grade-down ...
3 6 1 4 2 5
⍒∘↑ nvs ⍝ ... concurs with ⍒∘↑
3 6 1 4 2 5
refs ← {}∘(⎕ns∘{''}∘⎕ex¨ ⍨) ⍝ refs to new spaces.
refs'xy' ⍝ new spaces
x.(a c)←1 3 ⍝ with names a c
y.(a b)←1 4 ⍝ ... and a b
x le y ⍝ (a c) supersedes (a b)
0
x.b←2 ⍝ new name b in x
x le y ⍝ (a:1 b:2 ...) precedes (a:1 b:4 ...)
1
refs'xyz' ⍝ new spaces
x.le←⎕nr'le' ⍝ x.le is ⎕nr of function.
y.le←⎕or'le' ⍝ y.le is ⎕or of function.
z.⎕fx ⎕cr'le' ⍝ z.le is function.
cmp ← ∘.le⍨ ⍝ comparison table.
cmp x y z ⍝ x ≤ y ≤ z.
1 1 1
0 1 1
0 0 1
refs'xy' ⍝ new spaces
{}x.?1 ⍝ mutate x.⎕rl
x le y ⍝ x.⎕rl >> y.⎕rl
0
refs'xy' ⍝ new spaces.
x.(ref←⎕ns'') ⍝ inward-pointing ref.
y.(ref←##.x) ⍝ outward-pointing ref.
cmp x y ⍝ comparisons
1 1
0 1
le qsort 3 4 3j4 3j¯4 ¯3j4 ¯3j¯4 4j3 4j¯3 ¯4j3 ¯4j¯3
¯4J¯3 ¯4J3 ¯3J¯4 ¯3J4 3J¯4 3 3J4 4J¯3 4 4J3
gu 3j5 3j4 4j3 3j4 ⍝ complex number grade-up.
2 4 1 3
:If {0::0 ⋄ (⎕ex'f'){1}'f'⎕wc ⍵}'Form'('Visible' 0) ⍝ support for GUI?
{}'eg'{⍺ ⎕wc'Form' ⍵ ('Visible' 0)}¨'Echo' 'Golf' ⍝ two forms.
g le e ⍝ compared on Caption property
0
e g←0 ⍝ remove forms.
:EndIf
cmp {⍵⊣⍵.(p q)←↓⍉↑1 ¯1⌽¨⊂⍵}⎕NS¨3/⊂⍬ ⍝ Nick's example
1 1 1
1 1 1
1 1 1
cmp {⍵⊣⍵.(p q r s)←↓⍉↑(⍳4)⌽¨⊂⍵} ⎕ns¨4/⊂⍬ ⍝ 4-way Nick
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
(x←⎕ns ⍬).(x←⎕ns ⍬).(x←##) ⍝ 3-cycle
(y←⎕ns ⍬).(y←⎕ns ⍬).(y←⎕ns ⍬).(y←##.##) ⍝ 4-cycle
x y ≡ x.x.x y.y.y.y ⍝ check for cycles
1
cmp x y ⍝ shorter cycle is less
1 1
0 1
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ some checking fuctions:
v ← x 3 1 4 1 5 y ⍝ vector of values
cmp v
1 0 0 0 0 0 1
1 1 0 1 0 1 1
1 1 1 1 1 1 1
1 0 0 1 0 1 1
1 1 1 1 1 1 1
1 0 0 0 0 1 1
0 0 0 0 0 0 1
tc ← (⊢ ∨ ∨.∧)⍨ ⍣≡ ⍝ transitive closure
tc cmp v ⍝ no effect: le is transitive
1 0 0 0 0 0 1
1 1 0 1 0 1 1
1 1 1 1 1 1 1
1 0 0 1 0 1 1
1 1 1 1 1 1 1
1 0 0 0 0 1 1
0 0 0 0 0 0 1
tck ← ≡∘tc⍨∘cmp ⍝ check of transitivity
tck v
1
rc ← ∨∘⍉ ⍨ ⍝ reflexive closure
rc cmp v ⍝ complete: le is total
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
rck ← 0∘(~∊)∘rc∘cmp ⍝ check of (reflexive) totality
rck v
1
chk ← tck ∧ rck ⍝ check
chk v ⍝ Hoorah!
1
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ regression tests:
chk (# #)(# # #) ⍝ extension of ref-arrays
1
gu (1 2 0)(1 2)(1 2 ¯3) ⍝ Adám's examples
2 3 1
gu 'Brudz' 'Adám' ('Adám',(⎕UCS 9)'B')
2 3 1
gu ,¯1 1∘.×(3 2)(2 3)⍴¨⊂⍳6 ⍝ Jay's examles
1 2 3 4
⍝∇ le display
Back to: code
Back to: Workspaces