From: Jim Pryor Date: Thu, 30 Sep 2010 19:53:38 +0000 (-0400) Subject: tweaked arithmetic X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=commitdiff_plain;h=6dcf7995023877c6946a45657126ead9266dcb40 tweaked arithmetic Signed-off-by: Jim Pryor --- diff --git a/arithmetic.mdwn b/arithmetic.mdwn index bc531ecd..beedc287 100644 --- a/arithmetic.mdwn +++ b/arithmetic.mdwn @@ -37,7 +37,8 @@ Here are a bunch of pre-tested operations for the untyped lambda calculus. In so let make_list = \h t f z. f h (t f z) in let isempty = \lst. lst (\h sofar. false) true in let head = \lst. lst (\h sofar. h) junk in - let tail = \lst. (\shift lst. lst shift (make_pair empty junk) get_2nd) + let tail_empty = empty in + let tail = \lst. (\shift. lst shift (make_pair empty tail_empty) get_2nd) ; where shift is (\h p. p (\t y. make_pair (make_list h t) t)) in let length = \lst. lst (\h sofar. succ sofar) 0 in @@ -48,13 +49,16 @@ Here are a bunch of pre-tested operations for the untyped lambda calculus. In so ; 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 + ; 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)) + ; where base is + (make_pair empty (map (\h u. u h) right)) + ; and build is + (\h sofar. sofar (\x y. isempty y + 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