We begin with an n dimensional vector space Vn over the reals with a positive definite bilinear form B. B(v, v) > 0 for all v≠0 in Vn. The Clifford algebra Cn is constructed on Vn and B. Our code assumes some particular basis for V in order to represent elements of Vn and Cn. We choose an orthonormal basis {bi} so that B(bi, bj) = δij. It would be well to test that the functions that our code defines are coordinate free. Consider an n by n orthogonal matrix Oij of reals that relates b to a new orthonormal basis {b'i} for Vn:
b'i = ΣOijbj.
We seek a Scheme function that takes a Clifford number expressed in b, an orthogonal matrix and produces a Clifford number expressed in b'.

We take the degree of the Clifford number, n, from the matrix om. We assume a suite of operators for C4.

```(define (nc om cn) (let ((bp (map (lambda (or) (let sl ((sm H0)(o or)(b basis))
(if (null? o) sm (sl (H+ sm (H* (Hrls (car o))(car b))) (cdr o)(cdr b))))) om)))
(let ev ((cn cn)(bp bp)) (if (number? cn) (Hrls cn) (H+ (ev (car cn)(cdr bp))
(H* (ev (cdr cn) (cdr bp)) (car bp)))))))

(let ((v (Hsg))) (list v (nc '((1 0 0 0)(0 1 0 0)(0 0 1 0)(0 0 0 1)) v))) ; =>
(
((((1/3 . 73/108) 11/12 . 241/165) (13/194 . 47/5) 73/55 . 13/46)
((29/42 . 233/25) 69/64 . 27/115) (17/217 . 238/213) 157/61 . 243/65)

((((1/3 . 73/108) 11/12 . 241/165) (13/194 . 47/5) 73/55 . 13/46)
((29/42 . 233/25) 69/64 . 27/115) (17/217 . 238/213) 157/61 . 243/65)
)
(let ((v (Hsg))) (list v (nc '((0 1 0 0)(1 0 0 0)(0 0 1 0)(0 0 0 1)) v))) ; =>
(
((((235/28 . 5/111) 242/105 . 143/61) (15/187 . 83) 193/80 . 208/219)
((51/73 . 4/53) 23/70 . 223/7) (43/2 . 53/85) 5/6 . 146/91)

((((235/28 . 5/111) 242/105 . 143/61) (51/73 . 4/53) 23/70 . 223/7)
((15/187 . 83) 193/80 . 208/219) (-43/2 . -53/85) -5/6 . -146/91)
)
```
In this program, bp is the new basis expressed in the old C4 form. We then proceed to evaluate the input Clifford number recursively taking the list bp as the set of γi according to the semantics of our tree of reals which expresses Clifford numbers.

Here is a random orthogonal matrix to play with:

```(define om  '(
(-0.4506372677515  -0.0240064520521  -0.7762094766820  -0.4402823996936)
(-0.0856023222772  -0.7675236911504   0.3674036501274  -0.5182607295698)
(-0.8678167764956   0.2205599717149   0.4286188731882   0.1205537343015)
(-0.1910296777046  -0.6014020058644  -0.2807120726413   0.7232039973959)))
```