library: added Oleg's revappend
authorJim Pryor <profjim@jimpryor.net>
Mon, 4 Oct 2010 12:51:54 +0000 (08:51 -0400)
committerJim Pryor <profjim@jimpryor.net>
Mon, 4 Oct 2010 12:51:54 +0000 (08:51 -0400)
Signed-off-by: Jim Pryor <profjim@jimpryor.net>
lambda_library.mdwn

index 2e65f5c..579668b 100644 (file)
@@ -63,8 +63,12 @@ and all sorts of other places. Others of them are our own handiwork.
        ; very inefficient but correct reverse
        let reverse = \lst. lst (\h sofar. append sofar (singleton h)) empty  in ; or
        ; more efficient reverse builds a left-fold instead
-       ; (make_left_list a (make_left_list b (make_left_list c empty)) ~~> \f z. f c (f b (f a z))
+       ; make_left_list a (make_left_list b (make_left_list c empty)) ~~> \f z. f c (f b (f a z))
        let reverse = (\make_left_list lst. lst make_left_list empty) (\h t f z. t f (f h z))  in
+       ; most elegant
+       ; revappend [a;b;c] [x;y] ~~> [c;b;a;x;y]
+       let revappend = \lst. lst (\hd sofar. \lst. sofar (make_list hd lst)) I  in
+       let rev = \lst. revappend lst 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))
                        ; where base is