計算機プログラムの構造と解釈 第二版 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

オッケー牧場。