let map = \f lst. lst (\h sofar. make_list (f h) sofar) empty in
let filter = \f lst. lst (\h sofar. f h (make_list h sofar) sofar) empty in ; or
let filter = \f lst. lst (\h. f h (make_list h) I) empty in
-
- ; append list2 to list1 with: list1 make_list list2
let singleton = \x f z. f x z in
+ ; append list2 to list1 with: list1 make_list list2
let reverse = \lst. lst (\h sofar. sofar make_list (singleton h)) empty in
; zip [a;b;c] [x; y; z] ~~> [(a,x);(b,y);(c,z)]
let zip = \left right. (\base build. reverse left build base (\x y. reverse x))
sofar
(make_pair (make_list (\u. head y (u h)) x) (tail y))
)) in
-
let all = \f lst. lst (\h sofar. and sofar (f h)) true in
let any = \f lst. lst (\h sofar. or sofar (f h)) false in