(define tree (lambda (x) (let Y ((x x)) (if (null? (cdr x)) (car x) (Y (let pair ((x x)) (if (null? x) '() (cons (cons (car x) (cadr x)) (pair (cddr x)))))))))) defaults write com.barebones.textwrangler BalanceIncludesDelimiters -bool YES http://www.barebones.com/support/develop/clm.html (let ((rnk (((fileVal "gRREF") zero? 0 1 / * - #f) 'rank))) (letrec ((bas (lambda (n) (cdr (let I ((n n)) (if (= n 0) (cons 0 (list 1)) ; (I n) returns a pair: ; zero in C(n) and a list of 2^n basis vectors in C(n). (let* ((J (I (- n 1))) (Z (car J)) (lo (cdr J))) (cons (cons Z Z) (append (map (lambda (o) (cons Z o)) lo) (map (lambda (o) (cons o Z)) lo))))))))) (fl (lambda (c) (if (pair? c) (append (fl (car c)) (fl (cdr c))) (list c))))) (ylppa (fileVal "Clifford2") (lambda (G reals) (ylppa (G (G (G (G (cons '() reals))))) (lambda (sg / tr bar alpha zer one + ng * rls basis) (ylppa basis (lambda (g0 g1 g2 g3) (let ((fun (lambda (a b) (let ((bm (map (lambda (x) (fl (* x a))) (bas 4)))) (list (equal? zer (* a b)) (rnk bm)))))) (list (let ((p (* g0 g1))) (fun (+ p g2) (+ p (ng g2)))) (fun (+ g3 (* g0 (* g1 g2))) (+ g1 (* g0 (* g2 g3)))) (let ((p (* (* g0 g1) (* g2 g3)))) (fun (+ one p) (+ one (ng p))))) ))))))))) ; => ((#t 8) (#t 8) (#t 8))