summaryrefslogtreecommitdiffstats
path: root/Scala/sandbox/5-intlist.scala
diff options
context:
space:
mode:
Diffstat (limited to 'Scala/sandbox/5-intlist.scala')
-rw-r--r--Scala/sandbox/5-intlist.scala35
1 files changed, 35 insertions, 0 deletions
diff --git a/Scala/sandbox/5-intlist.scala b/Scala/sandbox/5-intlist.scala
new file mode 100644
index 0000000..6b29401
--- /dev/null
+++ b/Scala/sandbox/5-intlist.scala
@@ -0,0 +1,35 @@
+
+object IntList {
+
+ trait List [T] {
+ def isEmpty: Boolean
+ def head: T
+ def tail: List[T]
+ def nth(n: Int): T
+ }
+
+ class Cons[T](val head: T, val tail: List[T]) extends List[T] {
+ def isEmpty = false
+ def nth(n: Int): T = {
+ if (isEmpty) throw new IndexOutOfBoundsException
+ if (n==0) head
+ else tail nth(n - 1)
+ }
+ }
+
+ class Nil[T] extends List[T] {
+ def isEmpty: Boolean = true
+ def head: Nothing = throw new NoSuchElementException("Nil.head")
+ def tail: Nothing = throw new NoSuchElementException("Nil.tail")
+ def nth(n: Int): Nothing = throw new NoSuchElementException("Nil.nth")
+ }
+
+
+ def run = {
+ println("IntList")
+ val list = new Cons(1, new Cons(2, new Cons(3, new Nil)))
+ println(list nth 2)
+ println(list nth 0)
+ /* println(list nth 5) */
+ }
+}