egison-3.10.3: lib/math/algebra/tensor.egi
;;;;;
;;;;;
;;;;; Tensor
;;;;;
;;;;;
(define $tensor-order
(lambda [%A]
(length (tensor-shape 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)
{;[<join _ <cons (& ?scalar? ?tensor-symbol?) _>> (capply `. xs)]
[_ (foldl b.. (car xs) (cdr xs))]})))
(define $T.+
(lambda [%t1 %t2]
(tensor (tensor-shape t1)
(map2 + (tensor-to-list t1) (tensor-to-list t2)))))
(define $T.-
(lambda [%t1 %t2]
(tensor (tensor-shape t1)
(map2 - (tensor-to-list t1) (tensor-to-list t2)))))