(define make-rat
(lambda (n d)
(let ((n1 (if (or (and (> n 0) (< d 0)) (and (< n 0) (> d 0))) -1 1))
(d1 1)
(n2 (if (> n 0) n (* -1 n)))
(d2 (if (> d 0) d (* -1 d))))
(let ((g (gcd n2 d2)))
(cons (* n1 (/ n2 g)) (* d1 (/ d2 g)))))))
(define (print-rat x)
(newline)
(display (numer x))
(display "/")
(display (denom x)))
(define numer car)
(define denom cdr)
(define one-half (make-rat 1 2))
(print-rat one-half)
(print-rat (make-rat 2 -3))
(print-rat (make-rat -2 3))
(print-rat (make-rat -2 -3))
SICP 习题2.1 make-rat 处理整数和负数版本
最新推荐文章于 2021-03-26 09:35:51 发布