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.