coroutines tweak
[lambda.git] / assignment3.mdwn
index 289f818..e240b73 100644 (file)
@@ -1,6 +1,19 @@
 Assignment 3
 ------------
 
 Assignment 3
 ------------
 
+Erratum corrected 11PM Sun 3 Oct: the following line
+
+       let tb = (make_list t12 (make_list t3 empty)) in
+
+originally read 
+
+       let tb = (make_list t12 t3) in
+
+This has been corrected below, and in the preloaded evaluator for 
+working on assignment 3, available here: [[assignment 3 evaluator]].
+
+<hr>
+
 Once again, the lambda evaluator will make working through this
 assignment much faster and more secure.
 
 Once again, the lambda evaluator will make working through this
 assignment much faster and more secure.
 
@@ -29,6 +42,7 @@ Recall that version 1 style lists are constructed like this (see
        ; church numerals
        let iszero = \n. n (\x. false) true in
        let succ = \n s z. s (n s z) in
        ; church numerals
        let iszero = \n. n (\x. false) true in
        let succ = \n s z. s (n s z) in
+       let add = \l r. l succ r in
        let mul = \m n s. m (n s) in
        let pred = (\shift n. n shift (make\_pair 0 0) get\_snd) (\p. p (\x y. make\_pair (succ x) x)) in
        let leq = \m n. iszero(n pred m) in
        let mul = \m n s. m (n s) in
        let pred = (\shift n. n shift (make\_pair 0 0) get\_snd) (\p. p (\x y. make\_pair (succ x) x)) in
        let leq = \m n. iszero(n pred m) in
@@ -37,6 +51,7 @@ Recall that version 1 style lists are constructed like this (see
        ; a fixed-point combinator for defining recursive functions
        let Y = \f. (\h. f (h h)) (\h. f (h h)) in
        let length = Y (\length l. isempty l 0 (succ (length (tail l)))) in
        ; a fixed-point combinator for defining recursive functions
        let Y = \f. (\h. f (h h)) (\h. f (h h)) in
        let length = Y (\length l. isempty l 0 (succ (length (tail l)))) in
+       let fold = Y (\f l g z. isempty l z (g (head l)(f (tail l) g z))) in
        
        eq 2 2 yes no
 
        
        eq 2 2 yes no
 
@@ -117,7 +132,7 @@ Expected behavior:
        let t12 = (make_list t1 (make_list t2 empty)) in
        let t23 = (make_list t2 (make_list t3 empty)) in
        let ta = (make_list t1 t23) in
        let t12 = (make_list t1 (make_list t2 empty)) in
        let t23 = (make_list t2 (make_list t3 empty)) in
        let ta = (make_list t1 t23) in
-       let tb = (make_list t12 t3) in
+       let tb = (make_list t12 (make_list t3 empty)) in
        let tc = (make_list t1 (make_list t23 empty)) in
 
        sum-leaves t1 ~~> 1
        let tc = (make_list t1 (make_list t23 empty)) in
 
        sum-leaves t1 ~~> 1