練習問題の解答例

***** 練習1の解答例 *****

(define apple 110)
(define orange 90)
(define pineapple 230)
(define peech 190)
(define melon 800)
(define box 50)
(define giftbox (+ (* melon 1) (* apple 5) (* orange 3) box))
(define specialbox (+ (* (* peech 0.9) 3) pineapple (* (* orange 0.8) 5)))

***** 練習2の解答例 *****
(define f (lambda (x)
    (+ (* x x) (* 5 x) 6)))
(define g (lambda (x)
    (* (+ x 2) (+ x 3))))
(define d (lambda (a b c)
    (- (* b b) (* 4 a c))))
(define heron4 (lambda (a b c s)
    (sqrt (* s (- s a) (- s b) (- s c)))))
(define heron (lambda (a b c)
    (heron4 a b c (/ (+ a b c) 2))))

上記は、ヒント1の解答例である。heron が heron4 を呼び出すインタフェースになっている。このような書き方は、後で学ぶ Prolog ではよく使われる。

ヒント2の解答例は次のようになる。
(define heron (lambda (a b c)
    (define s (/ (+ a b c) 2))
    (sqrt (* s (- s a) (- s b) (- s c)))))

ヒント3の解答例は次のようになる。よく見ると、ヒント1の解答例にて、heron4 の定義を展開しただけである。
(define heron (lambda (a b c)
    ((lambda (a b c s) (sqrt (* s (- s a) (- s b) (- s c))))
        a b c (/ (+ a b c) 2))))


(C) 2008.5.20 by tokuhisa