0

scala のコードのこの部分に問題があります

object Test12 {
  def times(chars: List[Char]): List[(Char, Int)] = {
    val sortedChars = chars.sorted
    sortedChars.foldLeft (List[(Char, Int)]()) ((l, e) =>
        if(l.head._1 == e){
            (e, l.head._2 + 1) :: l.tail
        } else {
            (e, 1) :: l
        } )
  }

  val s = List('a', 'b')

  val c = times s
}

最後の行でエラーが発生します:

メソッド時間の引数がありません。部分的に適用された関数として扱いたい場合は、このメソッドの後に `_' を付けます

しかし、最後の関数である foldLeft に 2 つの引数を指定したため、その理由がわかりません。

助けてくれてありがとう!

コードの考え方は、各文字が特定のリストに存在する時間をカウントすることです

4

2 に答える 2

3

times の構文は問題ありませんが、呼び出すときは括弧を使用する必要があります。つまり、次のようになります。

val c = times(s)

しかし、l が Nil かどうかをチェックせずに l.head を使用し、空のリストにはヘッドがないため、機能しません。たとえば、 match で確認できます。

def times(chars: List[Char]): List[(Char, Int)] = {
  val sortedChars = chars.sorted
  sortedChars.foldLeft (List[(Char, Int)]()) ((a,b) => (a,b) match {
    case (Nil, e) => (e, 1) :: Nil
    case ((e, count) :: l, f) => 
        if (e == f) (e, count + 1) :: l
        else (f, 1) :: (e, count) :: l
  })
}

より簡単な方法は、より高いレベルのコレクション関数を使用することですが:

def times(chars: List[Char]) = chars.groupBy(c=>c).map(x=>(x._1,x._2.length)).toList
于 2013-06-03T13:51:00.933 に答える
1
val c = times s

このように括弧なしでメソッドを呼び出すことはできません。times(s)またはを試してくださいthis times s

于 2013-06-03T13:50:04.837 に答える