(wat-aro)

無職から有職者にランクアップしました

SICP 問題 2.3

;; 長方形を高さと幅で定義
(define (make-rectangle height width)
  (cons height width))

(define (perimeter-rect rect)
  (+ (* 2 (height-rect rect))
     (* 2 (width-rect rect))))

(define (area-rect rect)
  (* (height-rect rect)
     (width-rect rect)))

(define (height-rect rect)
  (car rect))

(define (width-rect rect)
  (cdr rect))
gosh> (define r1 (make-rectangle 10 5))
r1
gosh> (perimeter-rect r1)
30
gosh> (area-rect r1)
50

 
 

;; 長方形を対角の二点によって定義
(define (make-rect p1 p2)
  (cons p1 p2))

(define (point-1 rect)
  (car rect))

(define (point-2 rect)
  (cdr rect))

(define (height-rect rect)
  (abs (- (y-point (point-1 rect))
          (y-point (point-2 rect)))))

(define (width-rect rect)
  (abs (- (x-point (point-1 rect))
          (x-point (point-2 rect)))))
gosh> (define r2 (make-rect (make-point 0 0) (make-point 10 5)))
r2
gosh> (perimeter-rect r2)
30
gosh> (area-rect r2)
50