]> git.rkrishnan.org Git - sicp.git/blob - src/sicp/ex4_21.rkt
Solution to 4.30. Extremely enlightening!
[sicp.git] / src / sicp / ex4_21.rkt
1 #lang racket
2
3 (define Y (lambda (f)
4             ((lambda (g) 
5                (g g))
6              (lambda (h)
7                (lambda (x)
8                  ((f (h h)) x))))))
9
10 ;; factorial
11 ((Y (lambda (fct) 
12       (lambda (n) 
13         (if (= n 1) 
14             1 
15             (* n (fct (- n 1))))))) 
16  10)
17
18 ;; fibonacci
19 ((Y (lambda (fib) 
20       (lambda (n) 
21         (cond 
22           ((= n 0) 0) 
23           ((= n 1) 1) 
24           (else (+ (fib (- n 1))
25                    (fib (- n 2))))))))
26  10)
27
28 ;; b
29 (define (f x)
30   ((lambda (even? odd?)
31      (even? even? odd? x))
32    (lambda (ev? od? n)
33      (if (= n 0) true (od? ev? od? (- n 1))))
34    (lambda (ev? od? n)
35      (if (= n 0) false (ev? ev? od? (- n 1))))))
36
37 (eq? (f 3) #f)
38 (eq? (f 4) #t)