暇な(ry

問題 2.2

(define (average x y)
  (/ (+ x y) 2))

(define (make-segment start-point end-point)
  (cons start-point end-point))

(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 (midpoint p1 p2)
  (make-point (average (x-point p1) (x-point p2))
              (average (y-point p1) (y-point p2))))

(define (midpoint-segment segment)
  (midpoint (start-segment segment) (end-segment segment)))

(define (print-point-core p)
  (display "(")
  (display (x-point p))
  (display ",")
  (display (y-point p))
  (display ")"))

(define (print-point p)
  (print-point-core p)
  (newline)
  'done.)

(define (print-segment seg)
  (print-point-core (start-segment seg))
  (display "-")
  (print-point-core (end-segment seg))
  (newline)
  'done.)

説明いる?

実行

gosh> (define seg1 (make-segment (make-point 10 10) (make-point 20 20)))
seg1
gosh> (print-segment seg1)
(10,10)-(20,20)
done.
gosh> (print-point (midpoint-segment seg1))
(15,15)
done.