Bend/examples/bubble_sort.hvm
2024-05-06 14:36:54 +02:00

33 lines
790 B
Plaintext

// Sorts a list
// sort : List -> List
(Sort []) = []
(Sort (List.cons x xs)) = (Insert x (Sort xs))
// Insert : U60 -> List -> List
(Insert v []) = (List.cons v [])
(Insert v (List.cons x xs)) = (SwapGT (> v x) v x xs)
// SwapGT : U60 -> U60 -> U60 -> List -> List
(SwapGT 0 v x xs) = (List.cons v (List.cons x xs))
(SwapGT _ v x xs) = (List.cons x (Insert v xs))
// Generates a random list
(Rnd 0 s) = List.nil
(Rnd n s) =
let s = (^ s (* s 0b10000000000000))
let s = (^ s (/ s 0b100000000000000000))
let s = (^ s (* s 0b100000))
(List.cons s (Rnd (- n 1) s))
// Sums a list
(Sum []) = 0
(Sum (List.cons x xs)) = (+ x (Sum xs))
(Main) =
let n = 10
(Sum (Sort (Rnd 0x100 n)))
// Use an argument from cli
// (Main n) = (Sum (Sort (Rnd 0x100 n)))