summaryrefslogtreecommitdiff
path: root/io
diff options
context:
space:
mode:
Diffstat (limited to 'io')
-rw-r--r--io/addmatrix.io21
-rw-r--r--io/animals.io19
-rw-r--r--io/divbyzero.io14
-rw-r--r--io/fib.io23
-rw-r--r--io/guess.io26
-rw-r--r--io/matrix.io74
-rw-r--r--io/myAverage.io15
-rw-r--r--io/unless.io5
8 files changed, 197 insertions, 0 deletions
diff --git a/io/addmatrix.io b/io/addmatrix.io
new file mode 100644
index 0000000..9944b75
--- /dev/null
+++ b/io/addmatrix.io
@@ -0,0 +1,21 @@
+List deepSum := method(
+ total := 0
+ self foreach(e,
+ if(e type == "List") then(
+ total = total + e deepSum
+ ) else(
+ total = total + e
+ )
+ )
+ return total
+)
+
+a := list(1,2,3)
+b := list(4,5,6)
+c := list(7,8,9)
+a deepSum println
+b deepSum println
+c deepSum println
+
+c := list(a,b,c)
+c deepSum println
diff --git a/io/animals.io b/io/animals.io
new file mode 100644
index 0000000..b1b1a55
--- /dev/null
+++ b/io/animals.io
@@ -0,0 +1,19 @@
+Object ancestors := method(
+ prototype := self proto
+ if (prototype != Object) then (
+ writeln("Slots of ", prototype type, "\n-------------")
+ prototype slotNames foreach(slotName, slotName println)
+ writeln
+ prototype ancestors
+ )
+)
+
+Animal := Object clone
+Animal speak := method("ambiguous animal noise" println)
+
+Duck := Animal clone
+Duck speak := method("quack" println)
+Duck walk := method("waddle" println)
+
+disco := Duck clone
+disco ancestors
diff --git a/io/divbyzero.io b/io/divbyzero.io
new file mode 100644
index 0000000..34b820e
--- /dev/null
+++ b/io/divbyzero.io
@@ -0,0 +1,14 @@
+"Before:" println
+writeln("3/2: ", 3/2)
+writeln("3/0: ", 3/0)
+writeln("3/-2: ", (3/(-2)))
+
+Number coreDiv := Number getSlot("/")
+Number / = method(n,
+ return if (n == 0, 0, self coreDiv(n))
+)
+
+"\nAfter:" println
+writeln("3/2: ", 3/2)
+writeln("3/0: ", 3/0)
+writeln("3/-2: ", (3/(-2)))
diff --git a/io/fib.io b/io/fib.io
new file mode 100644
index 0000000..46a6d54
--- /dev/null
+++ b/io/fib.io
@@ -0,0 +1,23 @@
+fib_rec := method(pos,
+ if (pos == 1 or pos == 2) then (
+ return 1
+ ) else (
+ return fib_rec(pos-1) + fib_rec(pos-2)
+ )
+)
+
+fib_loop := method(pos,
+ fst := 0
+ snd := 1
+ result := nil
+ (pos-1) repeat (
+ result := fst + snd
+ fst := snd
+ snd := result
+ )
+ return result
+)
+
+n := 4
+fib_rec(n) println
+fib_loop(n) println
diff --git a/io/guess.io b/io/guess.io
new file mode 100644
index 0000000..49ceeaa
--- /dev/null
+++ b/io/guess.io
@@ -0,0 +1,26 @@
+stdin := File standardInput
+secret := Random value(1, 100) round
+tries := 10
+n := nil
+newdiff := nil
+diff := nil
+
+"Guess the secret number between 1 and 100 :D" println
+
+while (n != secret and tries > 0,
+ write("You have ", tries, " tries left\nNumber? > ")
+ n = stdin readLine asNumber
+
+ newdiff = (secret - n) abs
+ if (diff isNil) then (
+ diff = newdiff
+ ) else (
+ if (newdiff < diff, "Hotter", "Colder") println
+ diff = newdiff
+ )
+
+ "" println
+ tries = tries - 1
+)
+
+if (n == secret, "Correct!", "Epic fail!") println
diff --git a/io/matrix.io b/io/matrix.io
new file mode 100644
index 0000000..3352c67
--- /dev/null
+++ b/io/matrix.io
@@ -0,0 +1,74 @@
+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)
diff --git a/io/myAverage.io b/io/myAverage.io
new file mode 100644
index 0000000..ab85a08
--- /dev/null
+++ b/io/myAverage.io
@@ -0,0 +1,15 @@
+InvalidType := Exception clone
+
+List myAverage := method(
+ acc := 0
+ self foreach(elm,
+ if (elm type == "Number") then (
+ acc = acc + elm
+ ) else (
+ InvalidType raise(elm type)
+ )
+ )
+ return (acc/size(self))
+)
+
+list(1,2,3) myAverage println
diff --git a/io/unless.io b/io/unless.io
new file mode 100644
index 0000000..9ccc9af
--- /dev/null
+++ b/io/unless.io
@@ -0,0 +1,5 @@
+unless := method(
+ (call sender doMessage(call message argAt(0))) ifFalse(
+ call sender doMessage(call message argAt(1))) ifTrue(
+ call sender doMessage(call message argAt(2)))
+)