再帰を使用してhereから問題13を解決しようとしていますが、エラーが発生します(これはわかりません)。繰り返し数を数えるリストを変換する
問題がある:
List('a, 'a, 'a, 'a, 'b, 'c, 'c, 'a, 'a, 'd, 'e, 'e, 'e, 'e)
が、私は繰り返し要素を返すとカウントする必要がある次のリストを考える:
object P13 extends App {
val ls2 = List('a, 'a, 'a, 'a, 'b, 'c, 'c, 'a, 'a, 'd, 'e, 'e, 'e, 'e)
println(ls2)
println(encodeDirect(ls2))
def encodeDirect[A](ls: List[A]): List[(Int,A)] = ls match {
case h :: tail => (ls.takeWhile(_ == h).count(_), h) +: encodeDirect (ls.dropWhile (_ == h))
case Nil => Nil
}
}
:
List((4,'a), (1,'b), (2,'c), (2,'a), (1,'d), (4,'e))
は、これは私のコードです
これはエラー:
P13.scala:18: error: type mismatch;
found : List[(Any, A)]
required: List[(Int, A)]
case h :: tail => (ls.takeWhile(_ == h).count(_), h) +: encodeDirect
(ls.dropWhile (_ == h))
^
one error found
どうしてこの問題が解決されましたか?
'count(_)'はすべての述語に一致し、 'size'と同等であってはなりませんか? – ps0604
@ ps0604、実際には、 'count'の述語関数は' T => Boolean'なので、おそらく 'count(_ => true)'が必要でした。これは 'size'と同等ですが、それほど効率的ではありません。 – Aivean