anchor.diff:  (defmethod (r- number rational) (x y) (r- (->rat x) y))
   (defmethod (r- number number)   (x y) (r- (->rat x) (->rat y)))
   
  -(defgeneric r* (x y) "Multiply rational numbers")
  +(defgeneric r* (x y) "Multiply rational numbers" :hidden)
   (defmethod (r* rational rational) (x y)
     (let* [((xn xd) (normalised-rational-components x))
            ((yn yd) (normalised-rational-components y))]
  
positive.code:   { :__add r+
      :__sub r-
      :__mul r*
      :__div r/ })
  
  (defmethod (pretty rational) (x)
    (let* [((xn xd) (normalised-rational-components x))]
  
negative.code: (defmethod (r+ number rational) (x y) (r+ (->rat x) y))
  (defmethod (r+ number number)   (x y) (r+ (->rat x) (->rat y)))
  
  (defgeneric r- (x y) "Subtract rational numbers" :hidden)
  (defmethod (r- rational rational) (x y)
    (let* [((xn xd) (normalised-rational-components x))
           ((yn yd) (normalised-rational-components y))]
  