Mitt første Io-objekt: Matrix


tirsdag 4. januar 2011 Polyglot Io

Io er et prototype-basert språk, på samme måte som JavaScript. Her har jeg laget en prototype for å definere en matrise. Den arver fra List og har fire funskjoner: en for å sette dimensjonen, en for å sette verdien for en bestemt koordinat, en for å hente ut igjen verdien, og til slutt en for å printe ut hele matrisen.

10 Matrix := List clone do(
11   dim := method(x, y,
12     for(i, 0, x-1,
13       self append(List clone)
14       self at(i) setSize(y)
15     )
16     return self
17   )
18   set := method(x, y, value,
19     self at(x) atPut(y, value)
20     return self
21   )
22   get := method(x, y,
23     self at(x) at(y)
24   )
25   print := method(
26     self foreach(x,
27       "[" print
28       x reduce(acc, y, acc .. ", " .. y) print
29       "]" println
30     )
31   )
32 )

Deretter lager jeg en metode for å gjøre det litt enklere å opprette nye matriser:

34 matrix := method(x, y, Matrix clone dim(x, y))

Og så bruker jeg det jeg har laget. Først oppretter jeg en ny matrise jeg kaller foo, og skriver den ut. Deretter setter jeg verdier for alle koordinatene, og skiver den ut på nytt. Til slutt skriver jeg ut en tekstreng hvor jeg henter ut verdien i rad 2, kolonne 1:

36 foo := matrix(3, 2)
37 foo println
38 
39 foo do(
40   set(0, 0, "Hello") set(0, 1, "World")
41   set(1, 0, "My")    set(1, 1, "name")
42   set(2, 0, "is")    set(2, 1, "Tobben")
43 )
44 foo println
45 
46 writeln("My name is " .. foo get(2, 1))

Og her er output:

C:\usr\local\bin>io_static.exe c:\temp\hello.io
[nil, nil]
[nil, nil]
[nil, nil]

[Hello, World]
[My, name]
[is, Tobben]

My name is Tobben

Se også forrige artikkel: Hello, world fra Io.


comments powered by Disqus