問題1.17 でいつもどおりわからなくなる

ここまで書いたけど、なぜか無限ループしてしまう。。。

(define (even? n)
  (= (remainder n 2) 0))

(define (double n)
  (* n 2))

(define (halve n)
  (/ n 2))

(define (* b n)
  (cond ((= n 0) 1)
        ((even? n) (double (* b (halve n))))
        (else (* b (* b (- n 1))))))

(* 5 3)

しょうがないので回答を調べてながら
修正してみる

参考:http://www.serendip.ws/archives/373

(define (even? n)
  (= (remainder n 2) 0))

(define (double n)
  (+ n n)) ;←ここがダメだった

(define (halve n)
  (/ n 2))

(define (* b n)
  (cond ((= n 0) 0)
        ((even? n) (* (double b) (halve n))) ;←ここもだめだった
        (else (+ b (* b (- n 1))))));←ここもね

(require (lib "trace.ss"))
(trace *)
(* 5 4)

何とか動きました。。。orz