您的位置:首页 > 其它

SICP 习题2.1 make-rat 处理整数和负数版本

2016-06-10 17:53 323 查看
(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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lambda