Skip to content

Instantly share code, notes, and snippets.

@tony612
Last active December 18, 2015 01:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tony612/5705761 to your computer and use it in GitHub Desktop.
Save tony612/5705761 to your computer and use it in GitHub Desktop.
Some exercises using io-lang
// Fabonacci using recursion and non-recursion
fib := method(k,
first := 0
sum := 1
for(i, 1, k - 1, tmp := sum;sum := sum + first;first := tmp)
sum
)
for(i, 1, 10, fib(i) println)
"" println
fib2 := method(k,
if (k == 1 or k == 2, return 1)
fib2(k - 1) + fib2(k - 2)
)
for(i, 1, 10, fib2(i) println)
"" println
// Override the / so that return 0 when the denominator is 0
originDiv := Number getSlot("/")
Number / := method(i,
if (i == 0, 0, self originDiv(i))
)
10 / 0 println // => 0
10 originDiv(0) println // => inf
"" println
Number / := Number originDiv(Number)
// Add all elements of the two dimentional array(list)
sumOfBiArr := method(l,
sum := 0
l foreach(sub,
sub foreach(v, sum = sum + v)
)
sum
)
sumOfBiArr(list(list(1, 2, 3), list(4, 5, 6), list(7, 8))) println
// Average of list
List myAverage := method(
sum := 0
self foreach(v, if(v type != "Number", Exception raise("#{v} is not a number" interpolate), sum = sum + v))
sum / self size
)
list(1, 2, 3) myAverage println
// Add dim method to proto of list to alloc memory for it
MultiList := List clone
MultiList dim := method(x, y,
self setSize(y)
for(i, 0, self size - 1, self atPut(i, list() setSize(x)))
)
MultiList set := method(x, y, value,
self at(y) atPut(x, value)
)
MultiList get := method(x, y,
self at(y) at(x)
)
matrix := MultiList clone
matrix dim(3, 4)
matrix set(1, 2, 10)
matrix get(1, 2) println
matrix println
// Serialize matrix and deserialize it
File with("matrix.data") open write(matrix serialized) close
new_matrix := doString(
File with("matrix.data") open readLines join
)
new_matrix println
// Guess the random number
guess := method(
n := 10
num := Random clone setSeed(1) value(1, 100) floor
stdIO := File standardInput
n repeat(
"Guess the number 1..100:" println
guess := stdIO readLine asNumber
if (guess > num,
"Bigger!" println,
if (guess < num,
"Smaller!" println,
"Bingo!" println;return
)
)
)
)
guess
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment