diff --git a/library/collection/List.scala b/library/collection/List.scala
index f2f62924376d778e22966ba19ce085cf75600524..1f8253f13e1ed15163265a20a1e36bba01b11d71 100644
--- a/library/collection/List.scala
+++ b/library/collection/List.scala
@@ -64,6 +64,26 @@ sealed abstract class List[T] {
       case Cons(x,xs) => xs.reverse :+ x
     }
   } ensuring (res => (res.size == size) && (res.content == content))
+
+  def take(i: Int): List[T] = (this, i) match {
+    case (Nil(), _) => Nil()
+    case (Cons(h, t), i) =>
+      if (i == 0) {
+        Nil()
+      } else {
+        Cons(h, t.take(i-1))
+      }
+  }
+
+  def drop(i: Int): List[T] = (this, i) match {
+    case (Nil(), _) => Nil()
+    case (Cons(h, t), i) =>
+      if (i == 0) {
+        Cons(h, t)
+      } else {
+        t.drop(i-1)
+      }
+  }
 }