問題2.3 – SICP(計算機プログラムの構造と解釈)その27

問題2.3

長方形のデータ抽象(2点で定義)

; 始発点、終着点で長方形を定義
(define (make-rectangle start end)
  (cons start end))

; 長方形の幅
(define (width rectangle)
  (let ((start (start-segment rectangle))
        (end (end-segment rectangle)))
       (abs (- (x-point start) (x-point end)))))

; 長方形の高さ
(define (height rectangle)
  (let ((start (start-segment rectangle))
        (end (end-segment rectangle)))
       (abs (- (y-point start) (y-point end)))))

; 長方形の周囲の長さ
(define (perimeter-rectangle rectangle)
  (let ((w (width rectangle))
        (h (height rectangle)))
       (* (+ w h) 2)))

; 長方形の面積
(define (area-rectangle rectangle)
  (let ((w (width rectangle))
        (h (height rectangle)))
       (/ (* w h) 2)))

(define p1 (make-point 4 0))
(define p2 (make-point 0 2))
(define r1 (make-rectangle p1 p2))
(perimeter-rectangle r1)
gosh> 12
(area-rectangle r1)
gosh> 4

長方形のデータ抽象(幅と高さで定義)

perimeter-rectanglearea-rectangle は 抽象化の壁により修正せずにそのまま使える。

; 幅、高さで長方形を定義
(define (make-rectangle w h)
  (cons w h))

; 長方形の幅
(define (width rectangle)
  (car rectangle))

; 長方形の高さ
(define (height rectangle)
  (cdr rectangle))

(define r2 (make-rectangle 4 2))
(perimeter-rectangle r2)
gosh> 12
(area-rectangle r2)
gosh> 4
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»