mirror of
https://github.com/HigherOrderCO/Bend.git
synced 2024-09-11 11:56:54 +03:00
60 lines
1.5 KiB
Plaintext
60 lines
1.5 KiB
Plaintext
# type Tree = (Leaf x) | (Node x0 x1)
|
|
Leaf = λx λl λn (l x)
|
|
Node = λx0 λx1 λl λn (n x0 x1)
|
|
|
|
swap = λn switch n {
|
|
0: λx0 λx1 (Node x0 x1)
|
|
_: λx0 λx1 (Node x1 x0)
|
|
}
|
|
|
|
warp = λa
|
|
let a_leaf = λax λb
|
|
let b_leaf = λbx λax λs (swap (^ (> ax bx) s) (Leaf ax) (Leaf bx))
|
|
let b_node = λa0 λa1 λax λs 0
|
|
((b b_leaf b_node) ax)
|
|
let a_node = λa0 λa1 λb
|
|
let b_leaf = λbx λa0 λa1 λs 0
|
|
let b_node = λb0 λb1 λa0 λa1 λs (join (warp a0 b0 s) (warp a1 b1 s))
|
|
((b b_leaf b_node) a0 a1)
|
|
(a a_leaf a_node)
|
|
|
|
join = λa
|
|
let a_leaf = λax λb 0
|
|
let a_node = λa0 λa1 λb
|
|
let b_leaf = λbx λa0 λa1 0
|
|
let b_node = λb0 λb1 λa0 λa1 (Node (Node a0 b0) (Node a1 b1))
|
|
((b b_leaf b_node) a0 a1)
|
|
(a a_leaf a_node)
|
|
|
|
flow = λa
|
|
let a_leaf = λax λs (Leaf ax)
|
|
let a_node = λa0 λa1 λs (down (warp a0 a1 s) s)
|
|
(a a_leaf a_node)
|
|
|
|
down = λa
|
|
let a_leaf = λax λs (Leaf ax)
|
|
let a_node = λa0 λa1 λs (Node (flow a0 s) (flow a1 s))
|
|
(a a_leaf a_node)
|
|
|
|
sort = λa
|
|
let a_leaf = λax λs (Leaf ax)
|
|
let a_node = λa0 λa1 λs (flow (Node (sort a0 0) (sort a1 1)) s)
|
|
(a a_leaf a_node)
|
|
|
|
gen = λn switch n {
|
|
0: λx (Leaf x)
|
|
_: λx (Node (gen n-1 (* x 2)) (gen n-1 (+ (* x 2) 1)))
|
|
}
|
|
|
|
rev = λa
|
|
let a_leaf = λax (Leaf ax)
|
|
let a_node = λa0 λa1 (Node (rev a1) (rev a0))
|
|
(a a_leaf a_node)
|
|
|
|
sum = λa
|
|
let a_leaf = λax ax
|
|
let a_node = λa0 λa1 (+ (sum a0) (sum a1))
|
|
(a a_leaf a_node)
|
|
|
|
main = (sum (sort (rev (gen 8 0)) 0))
|