diff options
author | Joel Kronqvist <joel.kronqvist@iki.fi> | 2025-08-22 00:51:30 +0300 |
---|---|---|
committer | Joel Kronqvist <joel.kronqvist@iki.fi> | 2025-08-22 00:51:30 +0300 |
commit | c88bb2e5c14e93a39d7e09651323e64ff644634d (patch) | |
tree | 2755fbf386224b64c63359f0f25ae8682e8d0bf7 | |
parent | 993e64759d168522ec70b7c5398182483383d568 (diff) | |
download | myslip-c88bb2e5c14e93a39d7e09651323e64ff644634d.tar.gz myslip-c88bb2e5c14e93a39d7e09651323e64ff644634d.zip |
feat: map and filter for integers in stdlib.slip
-rw-r--r-- | stdlib.slip | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/stdlib.slip b/stdlib.slip index 107bb1f..593dc14 100644 --- a/stdlib.slip +++ b/stdlib.slip @@ -22,7 +22,8 @@ (let sum (fix - (fn sum' ((Vector (Int ...)) -> Int) ((Vector (Int ...)) -> Int) + (fn sum' ((Vector (Int ...)) -> Int) + ((Vector (Int ...)) -> Int) (fn vec (Vector (Int ...)) Int (case vec ((h ..t) (+ h (sum' t))) @@ -30,3 +31,28 @@ ) ) )) + + +(let map-i->i (fix + (fn map' (((Vector (Int ...)) (Int -> Int)) -> (Vector (Int ...))) + (((Vector (Int ...)) (Int -> Int)) -> (Vector (Int ...))) + (fn (vec fun) ((Vector (Int ...)) (Int -> Int)) (Vector (Int ...)) + (case vec + ((h ..t) (<> (vector (fun h)) (map' t fun))) + (_ (() Int))) + ) + ) +)) + + +(let filter-int (fix + (fn filter' (((Vector (Int ...)) (Int -> Bool)) -> (Vector (Int ...))) + (((Vector (Int ...)) (Int -> Bool)) -> (Vector (Int ...))) + (fn (vec pred) ((Vector (Int ...)) (Int -> Bool)) (Vector (Int ...)) + (case vec + ((h ..t) (if (pred h) (<> (vector h) (filter' t pred)) (filter' t pred))) + (_ (() Int)) + ) + ) + ) +)) |