Hatena::Groupcsnagoya-sicp

mzpの日記

2008-11-09

宿題(1.14-1.20)

はてなブックマーク - 宿題(1.14-1.20) - mzpの日記

ボクはコードが書きたいんだ、コードが。作用回数とかはprintを埋めこんでズルしよう。

1.16

初めは問題の意味がよく分からなかったけど、要するにexpr-fastを末尾再帰で実装しろって意味だろう。

(define (expt-iter a b n)
  (if (= n 0)
      a
      (if (= (remainder n 2) 0)
	  (expt-iter a (* b b) (/ n 2))
	  (expt-iter (* a b) b (- n 1)))))

1.17

さすがに*を再定義するのは怖かったので、名前は変えた。

(define (times a b)
  (if (= b 0)
      0
      (if (= (remainder b 2) 0)
	  (times (double a) (halve b))
	  (+ a (times a (- b 1))))))

1.18

(define (times-iter a b c)
  (if (= b 0)
      c
      (if (= (remainder b 2) 0)
	  (times-iter (double a) (halve b) c)
	  (times-iter a (- b 1) (+ a c)))))

1.19

わかんない。だれか教えて。>
トラックバック - http://csnagoya-sicp.g.hatena.ne.jp/mzp/20081109