99 問題の P08 のパッキング問題をやっています。これは正しくやっていると思いますが、Scala の構文に何か問題があり、それがわからないと思います..
def pack(list: List[Char]): List[List[Char]] = {
@tailrec
def checkNext(a: List[List[Char]], prev: Char, l: List[Char] ): List[List[Char]] = {
if (!l.nonEmpty) a
else {
val res = if (prev==l.head) List(a.head:::List(l.head)) else a:::List(List(l.head))
checkNext(res, l.head, l.tail)
}
}
checkNext(List(List(list.head)), list.head, list.tail)
}
編集:申し訳ありませんが、はい、完全にコンパイルされますが、本来の目的を実行する代わりに、すべてをマージしてしまい、その理由がわかりません。近くの等しい文字を char のリストにグループ化する必要があります。例:
pack(List('a, 'a, 'a, 'a, 'b, 'c, 'c, 'a, 'a, 'd, 'e, 'e, 'e, 'e)) =>
List(List('a, 'a, 'a, 'a), List('b), List('c, 'c), List('a, 'a), List('d),
List('e, 'e, 'e, 'e))