本文
2.1.1 有理数の算術演算
cons を使用して対(pair)を作ることができる
(define x (cons 1 2)) (car x) (cdr x)
問題解答
問2.1
(define (make-rat n d) (let ((sign (/ (* n d) (* (abs n) (abs d)))) (g (gcd (abs n) (abs d)))) (cons (* sign (/ (abs n) g)) (/ (abs d) g)))) (define v (make-rat 1 2)) (print-rat v) (define v (make-rat -1 2)) (print-rat v) (define v (make-rat 1 -2)) (print-rat v) (define v (make-rat -1 -2)) (print-rat v)
何だかイケテナイ感。参考解答だとこんな感じ。
(define (make-rat n d) (let ((g (abs (gcd n d)))) (if (< d 0) (cons (/ (- n) g) (/ (- d) g)) (cons (/ n g) (/ d g)))))
うむ。たしかにー。
本文
2.1.2 抽象の壁
データを扱う際に、対象のレイヤ毎に抽象化をおこない、インターフェースを通して対象を操作することでプログラムの修正・維持が楽になったり柔軟性を保ち続ける助けになる。
今日はここまで。うーん、ちょっとよそ事をしたりダラダラしてしまって時間を無駄にしている。
もっと時間を有効に使わないと。