計算機プログラムの構造と解釈 第二版 P53 問題2.7
この問題は、
- 選択子upper-bound
- 選択子lower-bound
を求める問題。
これはそんなに難しくない。
対を作るのは、consだから、、、
(define upper-bound cdr) (define lower-bound car)
これでいいのかな?
僕はかなりはりきって。
(define (lower-bound interval) (min (car interval) (cdr interval))) (define (upper-bound interval) (max (car interval) (cdr interval)))
ここまでやっちゃったんだけど、ここまでやる必要はないらしい。
んで、実装
#!/usr/local/bin/gosh ;; -*- coding: utf-8 -*- (use ggc.debug.trace) (use math.mt-random) ;;P53 ;;和 (define (add-interval x y) (make-interval (+ (lower-bound x) (lower-bound y)) (+ (upper-bound x) (upper-bound y)))) ;;積 (define (mul-interval x y) (let ((p1 (* (lower-bound x) (lower-bound y))) (p2 (* (lower-bound x) (upper-bound y))) (p3 (* (upper-bound x) (lower-bound y))) (p4 (* (upper-bound x) (upper-bound y)))) (make-interval (min p1 p2 p3 p4) (max p1 p2 p3 p4)))) ;;商 (define (div-interval x y) (mul-interval x (make-interval (/ 1.0 (upper-bound y)) (/ 1.0 (lower-bound y))))) ;;問題2-7 (define (make-interval a b) (cons a b)) (define (upper-bound interval) (max (car interval) (cdr interval))) (define (lower-bound interval) (min (car interval) (cdr interval))) (define interval1 (make-interval 4 9)) (define upper-bound cdr) (define lower-bound car) ;; main (define (main args) (newline) (display "interval1:") (display interval1)(newline) (display "(lower-bound interval1): ") (display (lower-bound interval1))(newline) (display "(upper-interval1): ") (display (upper-bound interval1))(newline) (newline) 0)
実行
interval1:(4 . 9) (lower-bound interval1): 4 (upper-interval1): 9
オッケー牧場。