;;;;; ;;;;; ;;;;; Tensor ;;;;; ;;;;; (define $tensor-order (lambda [%A] (length (tensor-size A)))) (define $unit-tensor (lambda [$ns] (generate-tensor kronecker-delta ns))) (define $scalar-to-tensor (lambda [$x $ns] (* x (unit-tensor ns)))) (define $zero-tensor (lambda [$ns] (generate-tensor (cambda $xs 0) ns))) (define $b..' (lambda [%t1 %t2] (contract +' (*' t1 t2)))) (define $b.. (lambda [%t1 %t2] (contract + (* t1 t2)))) (define $.' (cambda $xs (foldl b..' (car xs) (cdr xs)))) (define $. (cambda $xs (match xs (list something) {[> (capply `. xs)] [_ (foldl b.. (car xs) (cdr xs))]}))) (define $T.+ (lambda [%t1 %t2] (tensor (tensor-size t1) (map2 + (tensor-to-list t1) (tensor-to-list t2))))) (define $T.- (lambda [%t1 %t2] (tensor (tensor-size t1) (map2 - (tensor-to-list t1) (tensor-to-list t2)))))