SICP 2.2
抽象データ型とセレクタを作って、それらを利用する手続きを定義する練習。
; point (define make-point cons) (define x-point car) (define y-point cdr) (define (print-point p) (display "(") (display (x-point p)) (display ",") (display (y-point p)) (display ")") (newline)) ; segment (define make-segment cons) (define start-segment car) (define end-segment cdr) (define (midpoint-segment p) (define (avarage x y) (/ (+ x y) 2)) (let ((s (start-segment p)) (e (end-segment p))) (make-point (avarage (x-point s) (x-point e)) (avarage (y-point s) (y-point e))))) ; test (define p1 (make-point 1 5)) (define p2 (make-point 3 11)) (define s1 (make-segment p1 p2)) (print-point (midpoint-segment s1))
リストじゃなくてconsがプリミティブっていうのはちょっと違和感がある。consセルが存在しなくって、リストだけっていうのもアリじゃないのかなぁ。