sicp-124-125
Posted on 2015-02-12 23:17:32 +0900 in SICP
1.16
#lang planet neil/sicp
(define (square x) (* x x))
(define (fast-expt b n)
(define (iter a b n)
(cond ((= n 0) a)
((even? n) (iter a (square b) (/ n 2)))
(else (iter (* a b) b (- n 1)))))
(iter 1 b n))1.18
(define (multi a b)
(define (fast-multi-iter x y n)
(cond ((= n 0) x)
((even? n) (fast-multi-iter x (double y) (/ n 2)))
(else (fast-multi-iter (+ x y) y (- n 1)))))
(fast-multi-iter 0 a b))1.20
Applicative order:
gcd(206, 40)
gcd(40, remainder(206, 40)) ;1
gcd(6, remainder(40, 6)) ;2
gcd(4, remainder(6, 4)) ;3
gcd(2, remainder(4, 2)) ;4For normal order, the remainder function is not calculated instantly.
It is calculated when it is necessary. It is passed by as a delay item.
(gcd 206 40)
(gcd 40 (remainder 206 40))
->
(if (= (remainder 206 40) 0)
40
(gcd (remainder 206 40)
(remainder 40 (remainder 206 40))))
->
(if (= (remainder 40 (remainder 206 40)) 0)
(remainder 206 40)
(gcd
(remainder
40
(remainder 206 40))
(remainder
(remainder 206 40)
(remainder
40
(remainder 206 40)))))
...Hide Comments
comments powered by Disqus