息抜きにSICPでも

;; q2.1
;;正負を正規化するmake-ratの改良版
(define (make-rat n d)
  (cond
;;    (((and (> n 0) (> d 0))(cons n d));両者+ならそのまま
   ((and (< n 0) (< d 0)) (cons (* -1 n) (* -1 d)));両者-なら両者-で
   ((and (> n 0) (< d 0)) (cons (* -1 n) (* -1 d)));分母+分母-
   ((and (< n 0) (< d 0)) (cons n (* -1 d) ));分子-分母+
   ((= d 0) (cons 0 0 ));分母0
   ((= n 0) (cons n d ));分子0
   (else (cons n d)));本当は1行目がここに来ればいいのだ
  )
(define (make-rat n d)
  (cond
   ;;    ((and (< n 0) (< d 0)) (cons (* -1 n) (* -1 d) ));分子-分母- ;いらない
   ;;順番重要
   ((and (= n 0) (< d 0)) (cons  n (* -1 d)));分子0分母-
;;   ((= d 0) (cons 0 0 ));分母0
   ((= d 0) (error "divided by Zero"));分母0
   ((= n 0) (cons n d ));分子0
   ((< d 0) (cons (* -1 n) (* -1 d)));分母-
   ;;    ((> n 0) (cons n d ));分子- ;いらない
   (else (cons n d)));本当は1行目がここに来ればいいのだ
  )
(define (make-rat n d)
  (cond
   ;;順番重要
   ((and (= n 0) (< d 0)) (cons  n (* -1 d)));分子0分母-
   ((= d 0) (error "Divided by Zero"));分母0
   ((< d 0) (cons (* -1 n) (* -1 d)));分母-
   (else (cons n d)))
  )
(make-rat 1 1)
(make-rat -1 1)
(make-rat 1 -1)
(make-rat -1 -1)
(make-rat 0 -1);
(make-rat -1 0)
(make-rat 0 0)
;;絵を描けばよいのだけれど。お布団の中にはペンもノートもございません