; If m is a square matrix of vectors, (tmz m) tells if it is the identity. (define (tmz m) (let ((trz (lambda (l) (let rz ((w l)) (or (null? w) (and (veq #() (car w)) (rz (cdr w)))))))) (or (null? m) (let ((c (map car m))(R (map cdr m))) (and (veq #(1) (car c)) (trz (car R)) (trz (cdr c)) (tmz (cdr R))))))) ; ----- (define z #(0 0 0)) (define o #(1 0)) (tmz (list (list o z z z) (list z o z z) (list z z o z) (list z z z o))) ; => #t (tmz (list (list o z z z) (list z #(3) z z) (list z z o z) (list z z z o))) ; => #f (tmz (list (list o z z z) (list z o z #(3)) (list z z o z) (list z z z o))) ; => #f (tmz (list (list o z z z) (list z o z z) (list z z o z) (list #(3) z z o))) ; => #f (tmz (list (list o z z z) (list z o z z) (list z z o z) (list z #(3) z o))) ; => #f (tmz (list (list o z z z) (list z o z z) (list z #(3) o z) (list z z z o))) ; => #f (tmz (list (list o z z z) (list z o #(3) z) (list z z o z) (list z z z o))) ; => #f