2.1

练习 2.1 请定义出 make-rat 的一个更好的版本,使之可以正确处理正数和负数。当有理数为正时,make-rat 应当将其规范化,使它的分子和分母都是正的。如果有理数为负,那么就应只让分子为负。

优化前:

 
(define (make-rat n d) (cons n d))
 
(define (numer x) (car x))
 
(define (denom x) (cdr x))
 
(define (print-rat x)
    (newline)
    (display (numer x))
    (display "/")
    (display (denom x)))
 
(print-rat (make-rat 1 2))
(print-rat (make-rat -1 -2))
(print-rat (make-rat 1 -2))

优化后:

 
(define (make-rat n d)
    (if (> (* n d) 0)
        (cons (abs n) (abs d))
        (cons (- 0 (abs n)) (abs d))
    )
)
 
 
(define (numer x) (car x))
 
(define (denom x) (cdr x))
 
(define (print-rat x)
    (newline)
    (display (numer x))
    (display "/")
    (display (denom x)))
 
(print-rat (make-rat 1 2))
(print-rat (make-rat -1 -2))
(print-rat (make-rat 1 -2))

results matching ""

    No results matching ""