Lesson to learn:
;;;;;; Fractions Arithmetic
(defun fr (numerator denominator)
(list 'fr numerator denominator))
(defun get-numerator (fraction) (second fraction))
(defun get-denominator (fraction) (third fraction))
(defun times-fr (fraction-1 fraction-2)
(let ((numerator-1 (get-numerator fraction-1))
(numerator-2 (get-numerator fraction-2))
(denominator-1 (get-denominator fraction-1))
(denominator-2 (get-denominator fraction-2)))
(fr (* numerator-1 numerator-2)
(* denominator-1 denominator-2))))
(defun add-fr (fraction-1 fraction-2)
(let* ((numerator-1 (get-numerator fraction-1))
(numerator-2 (get-numerator fraction-2))
(denominator-1 (get-denominator fraction-1))
(denominator-2 (get-denominator fraction-2))
(new-numerator (+ (* numerator-1 denominator-2)
(* numerator-2 denominator-1)))
(new-denominator (* denominator-1 denominator-2))
(common-gcd (gcd new-numerator new-denominator))
(new-fraction (fr (/ new-numerator common-gcd)
(/ new-denominator common-gcd))))
(if (= (/ new-denominator common-gcd) 1)
(/ new-numerator common-gcd)
new-fraction)))
(defun add-all-fr (number-1 number-2)
"Add accepts integers and fr-numbers"
(let ((fraction-1 (cond ((numberp number-1)
(fr number-1 1))
(:else number-1)))
(fraction-2 (cond ((numberp number-2)
(fr number-2 1))
(:else number-2))))
(add-fr fraction-1 fraction-2)))
Write Complex Numbers Arithmetic (in the very same fashion as above) according to the following article:
Tutorial to Complex Arithmetic
