(define bubble-sort X -> (fix (fn bubble) X)) (define bubble [] -> [] [X] -> [X] [X Y | Z] -> [Y | (bubble [X | Z])] where (> Y X) [X Y | Z] -> [X | (bubble [Y | Z])]) (define bruno [1 X | Xs] 1 -> X [1 X | Xs] 2 -> Xs [2 X | Xs] _ -> X) (define h (@s "s" "t" "r" "i" "n" "g") -> 0 (@s "s" "t" "r" "i" "n" "g" "?") -> 1) (define balance [black [red [red A X B] Y C] Z D] -> [red [black A X B] Y [black C Z D]] [black [red A X [red B Y C]] Z D] -> [red [black A X B] Y [black C Z D]] [black A X [red [red B Y C] Z D]] -> [red [black A X B] Y [black C Z D]] [black A X [red B Y [red C Z D]]] -> [red [black A X B] Y [black C Z D]] S -> S) (define b 0 -> 0 N -> (n (- N 1))) (time (b 1e6)) (define b 0 -> 0 N -> (b (do (bubble [0 1 2 3 4 5 6 7 8 9]) (- N 1)))) (time (b 1e6)) (define b 0 -> 0 N -> (b (do (bruno [2 3] 3) (- N 1)))) (time (b 1e6)) (define b 0 -> 0 N -> (b (do (h "string?") (- N 1)))) (time (b 1e6)) (define b 0 -> 0 N -> (b (do (balance [black a x [red b y [red c z d]]]) (- N 1)))) (time (b 1e6))