aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Kronqvist <joel.kronqvist@iki.fi>2025-08-22 00:51:30 +0300
committerJoel Kronqvist <joel.kronqvist@iki.fi>2025-08-22 00:51:30 +0300
commitc88bb2e5c14e93a39d7e09651323e64ff644634d (patch)
tree2755fbf386224b64c63359f0f25ae8682e8d0bf7
parent993e64759d168522ec70b7c5398182483383d568 (diff)
downloadmyslip-c88bb2e5c14e93a39d7e09651323e64ff644634d.tar.gz
myslip-c88bb2e5c14e93a39d7e09651323e64ff644634d.zip
feat: map and filter for integers in stdlib.slip
-rw-r--r--stdlib.slip28
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))
+ )
+ )
+ )
+))