3

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))
4

2 に答える 2