Bend/tests/golden_tests/run_file/bitonic_sort_lam.bend
2024-05-29 11:59:58 -03:00

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))