def drop[T](n: Int, l: List[T]): List[T] = { def dropR(c: Int, curList: List[T]): List[T] = (c, curList) match { case (_, Nil) => Nil case (1, _ :: tail) => dropR(n, tail) case (_, e :: tail) => e :: dropR(c - 1, tail) } dropR(n, l) }
回答をみて気がつくのは、defの定義方法である。通常{}でくくるかとおもうが、 いきなり( )表現をつかっている。一つの配列からつくられる高階関数内に処理を書けるからだとおもう。
case文の使い方で気がつくことは、eとtailである、この2つは、どこにも定義や代入の記述がないことをみると、予約されている変数だろう。パターンマッチの書き方も()に応じて用意してあるのだろう。たしか()はTuple2だったはずだ。