猫型エンジニアのブログ

プログラム/ネットワーク系の技術関連をまとめたページです 

問題1.15~問題1.17

問題1.15

問題1.16

(define (expt b n)
  (expt-iter b n 1))

(define (expt-iter b counter product)
  (cond ((= counter 0) product)
        ((even? counter) (square (expt-iter b (/ counter 2) product)))
        ( else (expt-iter b (- counter 1) (* b product)))))

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

(define (square x)(* x x))

問題17

(define (double x) (+ x x))

(define (halve x)
  (cond ((even? x) (/ x 2))
        (else 0)))

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

(define (new-times a b)
  (cond ((= b 0) 0)
        ((even? b)(double (new-times a (halve b))))
        (else (+ a (* a (- b 1))))))