Matrix := List clone Matrix dim := method(x, y, m := Matrix clone x repeat ( l := List clone l setSize(y) m append(l) ) return m ) Matrix set := method(x, y, e, self at(x) atPut(y, e) ) Matrix get := method(x, y, self at(x) at(y) ) Matrix xysize := method( result := List clone result append(self size) result append(self at(0) size) return result ) Matrix transpose := method( dims := self xysize m := Matrix dim(dims at(1), dims at(0)) for (x, 0, dims at(0) -1, for (y, 0, dims at(1) -1, m set(y, x, self get (x, y)) ) ) return m ) Matrix toFile := method(fname, f := File with(fname) f remove f openForUpdating f write(self serialized) f close return self ) Matrix fromFile := method(fname, m := doFile(fname) return m ) m1 := Matrix dim(2,3) m1 set(0,0,0) m1 set(0,1,1) m1 set(0,2,2) m1 set(1,0,3) m1 set(1,1,4) m1 set(1,2,5) writeln("m1: ", m1) m2 := m1 transpose writeln("m2: ", m2) if (m1 == m2 transpose, "Equals!", "Not equals!") println m1 toFile("m1.txt") m3 := Matrix fromFile("m1.txt") writeln("m3 (serialized from m1): ", m3)