(define (testAlg name alg) (apply (lambda (conj sg zer zer? one + - * inv) (let* ((a (sg))(b (sg))(c (sg))(ai (inv a)) (asc (lambda (a b c)(- (* (* a b) c) (* a (* b c))))) (cmc (lambda (a b) (- (* a b) (* b a)))) (ta (lambda (val prop) (string-append (if (zer? val) "" "dont ") prop)))) (list name (ta (asc a b c) "assoc") (ta (+ (asc a b c) (asc b a c)) "L skew") (ta (+ (asc a b c) (asc a c b)) "R skew") (ta (asc a (conj a) b) "propA") (ta (asc a (inv a) b) "propB") (ta (- (cmc (* a b) c) (+ (+ (* a (cmc b c)) (* (cmc a c) b)) (let ((x (asc a b c))) (+ (+ x x) x)))) "three") (ta (let ((x (asc a b c))) (- (cmc (* a b) c) (+ (* a (cmc b c)) (+ (* (cmc a c) b) (+ (+ x x) x))))) "xsx") (ta (- (* (* (* c a) c) b) (* c (* a (* c b)))) "Mouf1") (ta (- (* b (* (* c a) c)) (* (* (* b c) a) c)) "Mouf2") (ta (- (* (* c a) (* b c)) (* c (* (* a b) c))) "Mouf3a") (ta (- (* (* c a) (* b c)) (* (* c (* a b)) c)) "Mouf3b") (ta (- (asc (* c c) a b) (+ (* c (asc c a b)) (* (asc c a b) c))) "L1") (ta (+ (asc (asc b c a) b c) (* (asc b c a) (cmc b c))) "L3") (ta (- (asc (asc b c a) b c) (* (cmc b c) (asc b c a))) "L4") (ta (let ((z (asc b c a))) (asc (* z z) b c)) "L5") (ta (let* ((z (asc b c a)) (w (* z z))) (cmc w a)) "L6") (ta (let* ((z (asc b c a)) (w (* z z))) (cmc (* w w) a)) "L7") ))) alg))