From d5c513588401ea7cd9388cd11512c39533b3d5fa Mon Sep 17 00:00:00 2001 From: Chris Date: Sat, 21 Feb 2015 15:08:14 -0500 Subject: [PATCH] re-solved the mutual recursion problem, just for fun. Close, but not exactly like the solution in the hint --- exercises/_assignment4_answers.mdwn | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/exercises/_assignment4_answers.mdwn b/exercises/_assignment4_answers.mdwn index ac1ab6eb..fa8bfae4 100644 --- a/exercises/_assignment4_answers.mdwn +++ b/exercises/_assignment4_answers.mdwn @@ -24,4 +24,33 @@ What about `add 2 X`? So `add n X <~~> X` for all (finite) natural numbers `n`. +Solutions to the factorial problem and the mutual recursion problem: +let true = \y n. y in +let false = \y n. n in +let pair = \a b. \v. v a b in +let fst = \a b. a in ; aka true +let snd = \a b. b in ; aka false +let zero = \s z. z in +let succ = \n s z. s (n s z) in +let zero? = \n. n (\p. false) true in +let pred = \n. n (\p. p (\a b. pair (succ a) a)) (pair zero zero) snd in +let add = \l r. r succ l in +let mult = \l r. r (add l) 0 in +let Y = \h. (\u. h (u u)) (\u. h (u u)) in + +let fact = Y (\f n . zero? n 1 (mult n (f (pred n)))) in + +let Y1 = \f g . (\u v . f(u u v)(v v u)) + (\u v . f(u u v)(v v u)) + (\v u . g(v v u)(u u v)) in + +let Y2 = \f g . Y1 g f in + +let proto_even = \e o n. zero? n true (o (pred n)) in +let proto_odd = \o e n. zero? n false (e (pred n)) in + +let even = Y1 proto_even proto_odd in +let odd = Y2 proto_even proto_odd in + +odd 3 -- 2.11.0