aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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))
+ )
+ )
+ )
+))