diff options
Diffstat (limited to 'samples')
-rw-r--r-- | samples/rosetta/function_composition.bruijn | 21 | ||||
-rw-r--r-- | samples/rosetta/hailstone.bruijn | 21 | ||||
-rw-r--r-- | samples/rosetta/levenshtein_distance.bruijn | 10 | ||||
-rw-r--r-- | samples/rosetta/ternary_logic.bruijn | 71 |
4 files changed, 123 insertions, 0 deletions
diff --git a/samples/rosetta/function_composition.bruijn b/samples/rosetta/function_composition.bruijn new file mode 100644 index 0000000..3415c5e --- /dev/null +++ b/samples/rosetta/function_composition.bruijn @@ -0,0 +1,21 @@ +:import std/Number . + +# composition, bluebird combinator +…∘… [[[2 (1 0)]]] + +:test (((inc ∘ (mul (+2))) (+3)) =? (+7)) ([[1]]) + +# 2x composition, blackbird combinator +…∘∘… [[[[3 (2 1 0)]]]] + +:test (((inc ∘∘ mul) (+2) (+3)) =? (+7)) ([[1]]) + +# 3x composition, bunting combinator +…∘∘∘… [[[[[4 (3 2 1 0)]]]]] + +:test (((inc ∘∘∘ (add ∘∘ mul)) (+1) (+2) (+4)) =? (+7)) ([[1]]) + +# reverse composition, queer bird combinator +…→… [[[1 (2 0)]]] + +:test ((((mul (+2)) → inc) (+3)) =? (+7)) ([[1]]) diff --git a/samples/rosetta/hailstone.bruijn b/samples/rosetta/hailstone.bruijn new file mode 100644 index 0000000..46cf8a2 --- /dev/null +++ b/samples/rosetta/hailstone.bruijn @@ -0,0 +1,21 @@ +:import std/Combinator . +:import std/List . +:import std/Math M +:import std/Number/Binary . + +# hailstone sequence using binary shifts +hailstone y [[(0 =? (+1b)) {}0 go]] + go 0 : (=²?0 (1 /²0) (1 (↑¹0 + 0))) + +# --- tests --- + +seq-27 hailstone (+27b) + +:test (∀seq-27) ((+112)) +:test (take (+4) seq-27) ((+27b) : ((+82b) : ((+41b) : {}(+124b)))) +:test (take (+4) <~>seq-27) ((+1b) : ((+2b) : ((+4b) : {}(+8b)))) + +all-below-100000 [0 : ∀(hailstone 0)] <$> seq + seq take (+1000) (iterate ++‣ (+1b)) + +main [head (max-by (M.compare ⋔ tail) all-below-100000)] diff --git a/samples/rosetta/levenshtein_distance.bruijn b/samples/rosetta/levenshtein_distance.bruijn new file mode 100644 index 0000000..2111ade --- /dev/null +++ b/samples/rosetta/levenshtein_distance.bruijn @@ -0,0 +1,10 @@ +:import std/Combinator . +:import std/Char C +:import std/List . +:import std/Math . + +levenshtein y [[[∅?1 ∀0 (∅?0 ∀1 (0 (1 [[[[go]]]])))]]] + go (C.eq? 3 1) (6 2 0) ++(lmin ((6 2 0) : ((6 5 0) : {}(6 2 4)))) + +:test ((levenshtein "rosettacode" "raisethysword") =? (+8)) ([[1]]) +:test ((levenshtein "kitten" "sitting") =? (+3)) ([[1]]) diff --git a/samples/rosetta/ternary_logic.bruijn b/samples/rosetta/ternary_logic.bruijn new file mode 100644 index 0000000..037ac41 --- /dev/null +++ b/samples/rosetta/ternary_logic.bruijn @@ -0,0 +1,71 @@ +true [[[0]]] + +maybe [[[1]]] + +false [[[2]]] + +¬‣ [0 true maybe false] + +:test (¬true) (false) +:test (¬maybe) (maybe) +:test (¬false) (true) + +…⋀… [[1 (0 1 1 1) (0 0 0 1) (0 0 0 0)]] + +:test (true ⋀ true) (true) +:test (true ⋀ maybe) (maybe) +:test (true ⋀ false) (false) +:test (maybe ⋀ true) (maybe) +:test (maybe ⋀ maybe) (maybe) +:test (maybe ⋀ false) (false) +:test (false ⋀ true) (false) +:test (false ⋀ maybe) (false) +:test (false ⋀ false) (false) + +…⋁… [[1 (0 0 0 0) (0 1 0 0) (0 1 1 1)]] + +:test (true ⋁ true) (true) +:test (true ⋁ maybe) (true) +:test (true ⋁ false) (true) +:test (maybe ⋁ true) (true) +:test (maybe ⋁ maybe) (maybe) +:test (maybe ⋁ false) (maybe) +:test (false ⋁ true) (true) +:test (false ⋁ maybe) (maybe) +:test (false ⋁ false) (false) + +…⊃… [[1 (0 true 0 1) (0 true 1 1) (0 1 1 1)]] + +:test (true ⊃ true) (true) +:test (true ⊃ maybe) (true) +:test (true ⊃ false) (true) +:test (maybe ⊃ true) (maybe) +:test (maybe ⊃ maybe) (maybe) +:test (maybe ⊃ false) (true) +:test (false ⊃ true) (false) +:test (false ⊃ maybe) (maybe) +:test (false ⊃ false) (true) + +…≡… [[1 (0 true 0 1) (0 1 1 1) (0 0 0 0)]] + +:test (true ≡ true) (true) +:test (true ≡ maybe) (maybe) +:test (true ≡ false) (false) +:test (maybe ≡ true) (maybe) +:test (maybe ≡ maybe) (maybe) +:test (maybe ≡ false) (maybe) +:test (false ≡ true) (false) +:test (false ≡ maybe) (maybe) +:test (false ≡ false) (true) + +# --- result samples --- + +:import std/List . + +main [[inp <> "=" <> !res ++ "\n"] <++> (cross3 ops trits trits)] + !‣ [0 "false" "maybe" "true"] + …<>… [[1 ++ " " ++ 0]] + inp 0 [[~1 <> (0 [[!1 <> (0 [[!1]])]])]] + res ^(^0) ^(~0) ^(~(~0)) + ops (…⋀… : "and") : ((…⋁… : "or") : ((…⊃… : "if") : {}(…≡… : "equiv"))) + trits true : (maybe : {}false) |