1 (* Written by Stephen
Weeks (sweeks@sweeks
.com
). *)
2 structure Array
= Array2
4 fun 'a
fold (n
: int, b
: 'a
, f
: int * 'a
-> 'a
) =
6 fun loop (i
: int, b
: 'a
) : 'a
=
9 else loop (i
+ 1, f (i
, b
))
13 fun foreach (n
: int, f
: int -> unit
) : unit
=
16 fun mult (a1
: real Array
.array
, a2
: real Array
.array
) : real Array
.array
=
18 val r1
= Array
.nRows a1
19 val c1
= Array
.nCols a1
20 val r2
= Array
.nRows a2
21 val c2
= Array
.nCols a2
23 then raise Fail
"mult"
25 let val a
= Array2
.array (r1
, c2
, 0.0)
27 fold (c1
, 0.0, fn (i
, sum
) =>
28 sum
+ Array
.sub (a1
, r
, i
) * Array
.sub (a2
, i
, c
))
29 in foreach (r1
, fn r
=>
31 Array
.update (a
, r
, c
, dot (r
,c
))));
41 val a
= Array
.tabulate Array
.RowMajor (dim
, dim
, fn (r
, c
) =>
44 if Real.== (41541750.0, Array2
.sub (mult (a
, a
), 0, 0))