Hatena::Groupcsnagoya-sicp

gabuchanの日記

2008-11-10

問題1.18

| 16:03

問題1.17は再帰的プロセスを生成するので反復的プロセスな手続きにしてみる。

(define (double x) (* x 2))
(define (halve x) (/ x 2))
(define (mul x y)
  (define (mul-iter x y result)
    (cond [(= y 0) result]
          [(even? y) (mul-iter (double x) (halve y) result)]
          [else (mul-iter x (- y 1) (+ result x))]))
  (mul-iter x y 0))