問題2.3
長方形のデータ構造。複数のやり方があるんだろうけど、とりあえず一番簡単な幅と高さを表す二つのベクタで定義。
; 線分の長さを求めるお助け関数 (define (length line) (let ((start (start-segment line)) (end (end-segment line))) (let ((x1 (x-point start)) (x2 (x-point end)) (y1 (y-point start)) (y2 (y-point end))) (sqrt (+ (square (- x2 x1)) (square (- y2 y1))))))) ; いつものsquare (define (square x) (* x x)) ; Constructor (define (make-rectangle vec1 vec2) (cons vec1 vec2)) ; Selector1 (define (get-base rect) (car rect)) ; Selector2 (define (get-height rect) (cdr rect)) ; Applicaition ; 周囲長 (define (perimeter rect) (let ((base (get-base rect)) (height (get-height rect))) (let ((base-length (length base)) (height-length (length height))) (+ (* 2 base-length) (* 2 height-length))))) ; 面積 (define (area rect) (let ((base (get-base rect)) (height (get-height rect))) (let ((base-length (length base)) (height-length (length height))) (* base-length height-length))))
別の実装って、どうするんだろう? とりあえず、対角線のベクタで定義してやる方法かな。
ま、何とでもできそうな気がするので、飛ばそう。
確か、あとで直交座標形と極座標形で同じような話が出てきたはず。