]> git.rkrishnan.org Git - sicp.git/commitdiff
solution to 4.21
authorRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Sun, 18 Dec 2011 07:16:06 +0000 (12:46 +0530)
committerRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Sun, 18 Dec 2011 07:16:36 +0000 (12:46 +0530)
src/sicp/ex4_21.rkt [new file with mode: 0644]

diff --git a/src/sicp/ex4_21.rkt b/src/sicp/ex4_21.rkt
new file mode 100644 (file)
index 0000000..a28f54f
--- /dev/null
@@ -0,0 +1,38 @@
+#lang racket
+
+(define Y (lambda (f)
+            ((lambda (g) 
+               (g g))
+             (lambda (h)
+               (lambda (x)
+                 ((f (h h)) x))))))
+
+;; factorial
+((Y (lambda (fct) 
+      (lambda (n) 
+        (if (= n 1) 
+            1 
+            (* n (fct (- n 1))))))) 
+ 10)
+
+;; fibonacci
+((Y (lambda (fib) 
+      (lambda (n) 
+        (cond 
+          ((= n 0) 0) 
+          ((= n 1) 1) 
+          (else (+ (fib (- n 1))
+                   (fib (- n 2))))))))
+ 10)
+
+;; b
+(define (f x)
+  ((lambda (even? odd?)
+     (even? even? odd? x))
+   (lambda (ev? od? n)
+     (if (= n 0) true (od? ev? od? (- n 1))))
+   (lambda (ev? od? n)
+     (if (= n 0) false (ev? ev? od? (- n 1))))))
+
+(eq? (f 3) #f)
+(eq? (f 4) #t)
\ No newline at end of file