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
+ let reverse = \lst. lst (\h sofar. sofar make_list (singleton h)) empty in
+ let zip = \left right. left (\h sofar. sofar (\x y. isempty y
+ sofar
+ (make_pair (make_list (\u v. head y (u v) h) x) (tail y))
+ )
+ (make_pair empty (map right (\h u v. u v h)))
+ )
+ (\x y. reverse x) 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
+
; version 1 lists
; Rosenbloom's fixed point combinator
let Y = \f. (\h. f (h h)) (\h. f (h h)) in
; Turing's fixed point combinator
- let Z = (\u f. f (u u f)) (\u f. f (u u f)) in
+ let Theta = (\u f. f (u u f)) (\u f. f (u u f)) in
; length for version 1 lists
- fact Z 3 ; returns 6
+ fact Theta 3 ; returns 6
<!--