Make a version of make-rat that handles positive and negative arguments
To normalize a fraction, one needs to do two things:


fix the signs of numerator and denominator; and
reduce them to their lowest terms.


Your implementation does these two things just fine.  However, there is an easier way.  To do (1), simply negate both numerator and denominator if the denominator is negative.  To do (2), divide by the greatest common divisor.

One could combine the two steps above.  Divide the numerator and denominator by the greatest common divisor with its sign fixed to be the same as the denominator's sign.  Implementation follows:

(define (make-rat n d)
  (let
      ((div ((if (&lt; d 0) - +) (abs (gcd n d)))))
    (cons (/ n div) (/ d div))))


If gcd always returns a positive number (which your implementation does not), you may remove the call to abs above.