# $Id: matrix.pliant,v 1.0 2002/02/07 18:27:00 dada Exp $
# http://dada.perl.it/shootout/
module "/pliant/language/context.pli"
gvar Int size := 30
function mkmatrix rows cols -> mx
arg Int rows ; arg Int cols
arg_w Array:(Array:Int) mx
var Array:Int row
var Int count := 1
for (var Int r) 0 rows-1
row:size := 0
for (var Int c) 0 cols-1
row += count
count := count + 1
mx += row
return mx
function mmult rows cols m1 m2 m3
arg Int rows ; arg Int cols
arg Array:(Array:Int) m1
arg Array:(Array:Int) m2
arg_w Array:(Array:Int) m3
var Array:Int row
var Int val
for (var Int i) 0 rows-1
row:size := 0
for (var Int j) 0 cols-1
val := 0
for (var Int k) 0 cols-1
val := val + m1:i:k * m2:k:j
row += val
m3 += row
gvar Array:(Array:Int) m1
gvar Array:(Array:Int) m2
gvar Array:(Array:Int) mm
gvar Str s_n := cast ((pliant_script_args translate Address 1) map CStr) Str
if (s_n parse (gvar Int n))
m1 := mkmatrix size size
m2 := mkmatrix size size
while n>0
mmult size size m1 m2 mm
n := n - 1
console mm:0:0 " " mm:2:3 " " mm:3:2 " " mm:4:4 eol
else
console "usage: matrix.pliant <number>" eol