(defun GreatestCommonDenominator
(a b
) ;; Find the greatest common denominator of a number
a
(GreatestCommonDenominator b
(rem a b
))))
(defun make
-rat
(n d
/ x
) ;; support procedure to ''create'' a rational number
(setq x
(GreatestCommonDenominator n d
))
;; return the numerator of a rational number.
;; return the denominator of a rational number.
;; support function to print the rational number in a pretty format.
;; rational number addition.
(make-rat (+ (* (numer x) (denom y))
(* (numer y) (denom x)))
(* (denom x) (denom y))))
;; rational number subtraction
(make-rat (- (* (numer x) (denom y))
(* (numer y) (denom x)))
(* (denom x) (denom y))))
;; rational number multiply
(make-rat (* (numer x) (numer y))
(* (denom x) (denom y))))
;; rational number divide
(make-rat (* (numer x) (denom y))
(* (denom x) (numer y))))
;; does a rational number equal another.
(= (* (numer x) (denom y))
(* (numer y) (denom x))))