2.01
; Define a better version of make-rat that handles both
; positive and negative arguments. make-rat should normalize
; the sign so that if the rational number is positive, both
; the numerator and denominator are positive, and if the
; rational number is negative, only the numerator is negative.
(define (numer x) (car x))
(define (denom x) (cdr x))
(define (print-rat x)
(newline)
(display (numer x))
(display "/")
(display (denom x)))
(define (make-rat n d)
(define g (gcd n d))
(let ((n-pos (abs (/ n g)))
(d-pos (abs (/ d g))))
(cond ((> (* n d) 0) (cons n-pos d-pos))
((< (* n d) 0) (cons (- n-pos) d-pos)))))
(print-rat (make-rat 6 18)) ;1/3
(print-rat (make-rat -6 -18)) ;1/3
(print-rat (make-rat 6 -18)) ;-1/3
(print-rat (make-rat -6 18)) ;-1/3