diff options
author | Marvin Borner | 2024-03-14 13:53:46 +0100 |
---|---|---|
committer | Marvin Borner | 2024-03-14 13:53:46 +0100 |
commit | 0b77800262b5c46d994e6cb6159f773de8a05c51 (patch) | |
tree | 54e63cfea8fcc046072cb9e0028a12fd34937265 | |
parent | 004f853f260d321753af32318ecdeb2c585af7b0 (diff) |
More samples
-rw-r--r-- | samples/rosetta/determine_sentence_type.bruijn | 12 | ||||
-rw-r--r-- | samples/rosetta/greatest_common_divisor.bruijn | 8 | ||||
-rw-r--r-- | samples/rosetta/mutual_recursion.bruijn | 20 | ||||
-rw-r--r-- | std/Math.bruijn | 7 |
4 files changed, 45 insertions, 2 deletions
diff --git a/samples/rosetta/determine_sentence_type.bruijn b/samples/rosetta/determine_sentence_type.bruijn new file mode 100644 index 0000000..551703b --- /dev/null +++ b/samples/rosetta/determine_sentence_type.bruijn @@ -0,0 +1,12 @@ +:import std/List . +:import std/Char . + +determine [∅?0 '?' ([(0 =? '?' 'Q' (0 =? '.' 'S' (0 =? '!' 'E' 'N')))] _0)] + +:test (determine empty) ('?') +:test (determine "hi there, how are you today?") ('Q') +:test (determine "I'd like to present to you the washing machine 9001.") ('S') +:test (determine "You have been nominated to win one of these!") ('E') +:test (determine "Just make sure you don't break it") ('N') + +main [[0]] diff --git a/samples/rosetta/greatest_common_divisor.bruijn b/samples/rosetta/greatest_common_divisor.bruijn new file mode 100644 index 0000000..37bbb66 --- /dev/null +++ b/samples/rosetta/greatest_common_divisor.bruijn @@ -0,0 +1,8 @@ +:import std/Combinator . +:import std/Number . + +gcd y [[[=?0 1 (2 0 (1 % 0))]]] + +:test ((gcd (+2) (+4)) =? (+2)) ([[1]]) +:test ((gcd (+10) (+5)) =? (+5)) ([[1]]) +:test ((gcd (+3) (+8)) =? (+1)) ([[1]]) diff --git a/samples/rosetta/mutual_recursion.bruijn b/samples/rosetta/mutual_recursion.bruijn new file mode 100644 index 0000000..3feb143 --- /dev/null +++ b/samples/rosetta/mutual_recursion.bruijn @@ -0,0 +1,20 @@ +:import std/Combinator . +:import std/Number . +:import std/List . + +f' [[[=?0 (+1) (0 - (1 (2 --0)))]]] + +m' [[[=?0 (+0) (0 - (2 (1 --0)))]]] + +f ^(y* (f' : {}m')) + +m _(y* (f' : {}m')) + +:test ((f (+0)) =? (+1)) ([[1]]) +:test ((m (+0)) =? (+0)) ([[1]]) +:test ((f (+4)) =? (+3)) ([[1]]) +:test ((m (+4)) =? (+2)) ([[1]]) +:test ((f (+15)) =? (+9)) ([[1]]) +:test ((m (+15)) =? (+9)) ([[1]]) + +main [[0]] diff --git a/std/Math.bruijn b/std/Math.bruijn index 78e3006..5952592 100644 --- a/std/Math.bruijn +++ b/std/Math.bruijn @@ -60,12 +60,15 @@ product L.foldl mul (+1) ⧗ (List Number) → Number :test (∏ (+1) → (+3) | ++‣) ((+24)) -# greatest common divisor -gcd z [[[1 =? 0 case-eq (1 >? 0 case-gre case-les)]]] ⧗ Number → Number → Number +# greatest common divisor using repeated subtraction +gcd* z [[[1 =? 0 case-eq (1 >? 0 case-gre case-les)]]] ⧗ Number → Number → Number case-eq 1 case-gre 2 (1 - 0) 0 case-les 2 1 (0 - 1) +# greatest common divisor using modulo (mostly faster than gcd*) +gcd z [[[=?0 1 (2 0 (1 % 0))]]] ⧗ Number → Number → Number + :test ((gcd (+2) (+4)) =? (+2)) (true) :test ((gcd (+10) (+5)) =? (+5)) (true) :test ((gcd (+3) (+8)) =? (+1)) (true) |