diff options
Diffstat (limited to '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)) + ) + ) + ) +)) |