(use test) ;; ex 1.9 (define inc add1) (define dec sub1) (define (my-+ a b) (if (= a 0) b (inc (my-+ (dec a) b)))) ;; (+ 2 3) ;; (if (= 2 0) 3 (inc (+ (dec 2) 3))) ;; (if #f 3 (inc (+ (dec 2) 3))) ;; (inc (+ (dec 2) 3)) ;; (inc (+ 1 3)) ;; (inc (if (= 1 0) 3 (inc (+ (dec 1) 3)))) ;; (inc (if #f 3 (inc (+ (dec 1) 3)))) ;; (inc (inc (+ (dec 1) 3))) ;; (inc (inc (+ 0 3))) ;; (inc (inc (if (= 0 0) 3 (inc (+ (dec 0) 3))))) ;; (inc (inc (if #t 3 (inc (+ (dec 0) 3))))) ;; (inc (inc 3)) ;; (inc 4) ;; 5 ;; => series of recursive processes (test 5 (my-+ 2 3)) (define (my-+ a b) (if (= a 0) b (my-+ (dec a) (inc b)))) ;; (+ 2 3) ;; (if (= 2 0) 3 (+ (dec 2) (inc 3))) ;; (if #f 3 (+ (dec 2) (inc 3))) ;; (+ (dec 2) (inc 3)) ;; (+ 1 4) ;; (if (= 1 0) 4 (+ (dec 1) (inc 4))) ;; (if #f 4 (+ (dec 1) (inc 4))) ;; (+ (dec 1) (inc 4)) ;; (+ 0 5) ;; (if (= 0 0) 5 (+ (dec 0) (inc 5))) ;; (if #t 5 (+ (dec 0) (inc 5))) ;; 5 ;; => series of iterative processes (test 5 (my-+ 2 3)) ;; ex 1.10 (define (A x y) (cond ((= y 0) 0) ((= x 0) (* 2 y)) ((= y 1) 2) (else (A (- x 1) (A x (- y 1)))))) ;; (A 1 10) ;; (A 0 (A 1 9)) ;; (A 0 (A 0 (A 1 8))) ;; (A 0 (A 0 (A 0 (A 1 7)))) ;; (A 0 (A 0 (A 0 (A 0 (A 1 6))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 5)))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 4))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 3)))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 2))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 1)))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 2))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 4)))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 8))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 16)))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 32))))) ;; (A 0 (A 0 (A 0 (A 0 64)))) ;; (A 0 (A 0 (A 0 128))) ;; (A 0 (A 0 256)) ;; (A 0 512) ;; 1024 (test 1024 (A 1 10)) ;; (A 2 4) ;; (A 1 (A 2 3)) ;; (A 1 (A 1 (A 2 2))) ;; (A 1 (A 1 (A 1 (A 2 1)))) ;; (A 1 (A 1 (A 1 2))) ;; (A 1 (A 1 (A 0 (A 1 1)))) ;; (A 1 (A 1 (A 0 2))) ;; (A 1 (A 1 4)) ;; (A 1 (A 0 (A 1 3))) ;; (A 1 (A 0 (A 0 (A 1 2)))) ;; (A 1 (A 0 (A 0 (A 0 (A 1 1))))) ;; (A 1 (A 0 (A 0 (A 0 2)))) ;; (A 1 (A 0 (A 0 4))) ;; (A 1 (A 0 8)) ;; (A 1 16) ;; (A 0 (A 1 15)) ;; (A 0 (A 0 (A 1 14))) ;; (A 0 (A 0 (A 0 (A 1 13)))) ;; (A 0 (A 0 (A 0 (A 0 (A 1 12))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 11)))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 10))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 9)))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 8))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 7)))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 6))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 5)))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 4))))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 3)))))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 2))))))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 1)))))))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 2))))))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 4)))))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 8))))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 16)))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 32))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 64)))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 128))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 256)))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 512))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 1024)))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 2048))))) ;; (A 0 (A 0 (A 0 (A 0 4096)))) ;; (A 0 (A 0 (A 0 8192))) ;; (A 0 (A 0 16384)) ;; (A 0 32768) ;; 65536 (test 65536 (A 2 4)) ;; (A 3 3) ;; (A 2 (A 3 2)) ;; (A 2 (A 2 (A 3 1))) ;; (A 2 (A 2 2)) ;; (A 2 (A 1 (A 2 1))) ;; (A 2 (A 1 2)) ;; (A 2 (A 0 (A 1 1))) ;; (A 2 (A 0 2)) ;; (A 2 4) ;; (A 1 (A 2 3)) ;; (A 1 (A 1 (A 2 2))) ;; (A 1 (A 1 (A 1 (A 2 1)))) ;; (A 1 (A 1 (A 1 2))) ;; (A 1 (A 1 (A 0 (A 1 1)))) ;; (A 1 (A 1 (A 0 2))) ;; (A 1 (A 1 4)) ;; (A 1 (A 0 (A 1 3))) ;; (A 1 (A 0 (A 0 (A 1 2)))) ;; (A 1 (A 0 (A 0 (A 0 (A 1 1))))) ;; (A 1 (A 0 (A 0 (A 0 2)))) ;; (A 1 (A 0 (A 0 4))) ;; (A 1 (A 0 8)) ;; (A 1 16) ;; (A 0 (A 1 15)) ;; (A 0 (A 0 (A 1 14))) ;; (A 0 (A 0 (A 0 (A 1 13)))) ;; (A 0 (A 0 (A 0 (A 0 (A 1 12))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 11)))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 10))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 9)))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 8))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 7)))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 6))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 5)))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 4))))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 3)))))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 2))))))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 1 1)))))))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 2))))))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 4)))))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 8))))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 16)))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 32))))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 64)))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 128))))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 256)))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 512))))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 (A 0 1024)))))) ;; (A 0 (A 0 (A 0 (A 0 (A 0 2048))))) ;; (A 0 (A 0 (A 0 (A 0 4096)))) ;; (A 0 (A 0 (A 0 8192))) ;; (A 0 (A 0 16384)) ;; (A 0 32768) ;; 65536 (test 65536 (A 3 3)) (define (f n) (A 0 n)) ;=> 2n (test 2 (f 1)) (test 4 (f 2)) (test 6 (f 3)) (test 8 (f 4)) (define (g n) (A 1 n)) ;=> 2^n (test 2 (g 1)) (test 4 (g 2)) (test 8 (g 3)) (test 16 (g 4)) (define (h n) (A 2 n)) ;=> 2^2^...^2 (exponentiate two repeatedly by two n times) (test 2 (h 1)) (test 4 (h 2)) (test 16 (h 3)) (test 65536 (h 4))