(define (square x) (* x x))
(define (average x y) (/ (+ x y) 2))
(define (make-segment s e) (cons s e))
(define (start-segment seg) (car seg))
(define (end-segment seg) (cdr seg))
(define (make-point x y) (cons x y))
(define (x-point p) (car p))
(define (y-point p) (cdr p))
(define (print-point p)
(display "(")
(display (x-point p))
(display ",")
(display (y-point p))
(display ")")
(newline))
(define (distance p1 p2)
(sqrt (+ (square (- (x-point p1) (x-point p2)))
(square (- (y-point p1) (y-point p2))))))
(define (how-long s)
(distance (start-segment s) (end-segment s)))
(define (make-rectangle1 p1 p2) (cons p1 p2))
(define (left-top-rectangle r) (car r))
(define (right-top-rectangle r) (make-point (x-point (cdr r)) (y-point (car r))))
(define (right-bottom-rectangle r) (cdr r))
(define (left-bottom-rectangle r) (make-point (x-point (car r)) (y-point (cdr r))))
(define (width-rectangle r) (distance (left-top-rectangle r) (right-top-rectangle r)))
(define (height-rectangle r) (distance (right-top-rectangle r) (right-bottom-rectangle r)))
(define (perimeter r)
(+ (* (width-rectangle r) 2)
(* (height-rectangle r) 2)))
(define (area r)
(* (width-rectangle r) (height-rectangle r)))
(define (make-rectangle2 s1 s2)
(cons (start-segment s1) (end-segment s2)))
(define p1 (make-point 1 1))
(define p2 (make-point 3 4))
(define r1 (make-rectangle1 p1 p2))
(define r2 (make-rectangle2 (make-segment p1 (make-point 3 1)) (make-segment (make-point 3 1) p2)))
(perimeter r1)
(area r1)
(perimeter r2)
(area r2)
- 最近は簡単なのでがんがんすすめていこう。
- 2章記念でsicpリングにはいった