以下のScalaメソッドでは、リストはメソッドによってどのようにxs
トラバースされnth
ますか?は再帰的に呼び出されますが、トレイトではパラメーター化されたタイプのリストが返されるだけなxs.tail
ので、テールが常に同じ値であるとは限らないのはなぜですか?def tail
List
object nth {
def nth[T](n: Int, xs: List[T]): T =
if (xs.isEmpty) throw new IndexOutOfBoundsException
else if (n == 0) xs.head
else {
nth(n - 1, xs.tail)
} //> nth: [T](n: Int, xs: week4.List[T])T
val list = new Cons(1, new Cons(2, new Cons(3, new Nil)))
nth(2 , list) > res0: Int=3
}
trait List[T] {
def isEmpty: Boolean
def head: T
def tail: List[T]
}
class Cons[T](val head: T, val tail: List[T]) extends List[T]{
def isEmpty = false
}
class Nil[T] extends List[T]{
def isEmpty = true
def head : Nothing = throw new NoSuchElementException("Nil.head")
def tail : Nothing = throw new NoSuchElementException("Nil.tail")
}