egison-3.7.8: sample/math/number/10bonacci.egi
(define $m 10)
(define $A
(generate-tensor
(match-lambda [integer integer]
{[[,1 _] 1]
[[$x ,(- x 1)] 1]
[[_ _] 0]})
{m m}))
A
;[| [| 1 1 1 1 1 1 1 1 1 1 |] [| 1 0 0 0 0 0 0 0 0 0 |] [| 0 1 0 0 0 0 0 0 0 0 |] [| 0 0 1 0 0 0 0 0 0 0 |] [| 0 0 0 1 0 0 0 0 0 0 |] [| 0 0 0 0 1 0 0 0 0 0 |] [| 0 0 0 0 0 1 0 0 0 0 |] [| 0 0 0 0 0 0 1 0 0 0 |] [| 0 0 0 0 0 0 0 1 0 0 |] [| 0 0 0 0 0 0 0 0 1 0 |] |]
(define $B
(generate-tensor
(match-lambda integer
{[,1 1]
[_ 0]})
{m}))
B
;[| 1 0 0 0 0 0 0 0 0 0 |]
(M.* A B)
;[| 1 1 0 0 0 0 0 0 0 0 |]
(define $M.*-mod
(lambda [%m1 %m2]
(modulo (b..' m1~#~j m2_j) (** 10 9))))
(M.*-mod A A)
;[| [| 2 2 2 2 2 2 2 2 2 1 |] [| 1 1 1 1 1 1 1 1 1 1 |] [| 1 0 0 0 0 0 0 0 0 0 |] [| 0 1 0 0 0 0 0 0 0 0 |] [| 0 0 1 0 0 0 0 0 0 0 |] [| 0 0 0 1 0 0 0 0 0 0 |] [| 0 0 0 0 1 0 0 0 0 0 |] [| 0 0 0 0 0 1 0 0 0 0 |] [| 0 0 0 0 0 0 1 0 0 0 |] [| 0 0 0 0 0 0 0 1 0 0 |] |]
(M.* (repeated-squaring M.*-mod A 10) B)
;[| 512 256 128 64 32 16 8 4 2 1 |]~#
(M.* (repeated-squaring M.*-mod A (** 10 18)) B)
;[| 781174235709863749 377867955633934335 842430993012717568 732703024915201024 898916287400615936 291801846997259776 348909715528105216 288982486365729408 408131585481965832 584591530883971372 |]