Listをフラット化する関数を記述したいと思います。Scala flatten List
object Flat {
def flatten[T](list: List[T]): List[T] = list match {
case Nil => Nil
case head :: Nil => List(head)
case head :: tail => (head match {
case l: List[T] => flatten(l)
case i => List(i)
}) ::: flatten(tail)
}
}
object Main {
def main(args: Array[String]) = {
println(Flat.flatten(List(List(1, 1), 2, List(3, List(5, 8)))))
}
}
私はそれが動作しない理由はわからないが、それはList(1, 1, 2, List(3, List(5, 8)))
を返しますが、それはList(1, 1, 2, 3, 5, 8)
をする必要があります。
私にヒントを教えてもらえますか?削除線で
これは演習として楽しいです。実際のコードではもちろん、 'List'に' flatten'メソッドがあります。 – AshleyF
この場合、それは動作しません。ここのリストは 'List [Any]'ですので、Any => TraversableOnce [_]から暗黙の変換を定義してflattenを呼び出さなければなりません。それは可能でなければならないが、私はそれがこの機能より簡単だとは思わない。 – rjsvaljean
コンパイラのエラーと警告を見てください:彼らはいくつかの大きな手がかりを与えます –