; http://cap-lore.com/MathPhys/Algebras/DivAlg.html
(list
(lambda (f) ; The Cayley Dickson construction
(apply (lambda (sg conj zer zer? one + - * inv) (list
  (lambda () (cons (sg) (sg))) ; new sample generator
  (lambda (x) (cons (conj (car x)) (- zer (cdr x)))) ; new conjugate
  (cons zer zer) ; new zero
  (lambda (a) (and (zer? (car a)) (zer? (cdr a)))) ; new zero test
  (cons one zer) ; new multiplicative unit
  (lambda (a b) (cons (+ (car a)(car b))(+ (cdr a)(cdr b)))) ; new add
  (lambda (a b) (cons (- (car a)(car b))(- (cdr a)(cdr b)))) ; new subtract
  (lambda (a b) (cons (- (* (car a)(car b))(* (conj (cdr b))(cdr a))) ; new multiply
                      (+ (* (cdr b)(car a))(* (cdr a)(conj (car b))))))
  (lambda (x) (let ((d (inv   ; new inverse
      (+ (* (car x)(conj (car x))) (* (cdr x)(conj (cdr x)))))))
          (cons (* d (conj (car x)))(- zer (* d (cdr x)))))))) f))

(list ; The reals to boot the above
  (lambda (x) x) 0 zero? 1 + - * (lambda (x) (/ x))))
