私はスカラーが初めてです。同じコードを2通り書きました。しかし、私は2つの方法の間で少し混乱しています。第2の方法では、引数fの型は自動的に導出されますが、型1ではスカラーコンパイラは同じことを行うことができません。私はちょうどこれの背後にある考えであるか理解したい。スカラでは、関数型を引数の別々のグループに渡して関数に渡す必要があります
タイプ1:コンパイルエラーに
def rightFold[A,B](xs:List[A],z:B,f:(A,B) => B): B = xs match {
case Nil => z
case Cons(x,xs) => f(x,rightFold(xs,z,f))
}
def sum1(l:List[Int]) = rightFold(l,0.0,_ + _)
タイプ2を提供します:罰金
def rightFold[A,B](xs:List[A],z:B)(f:(A,B) => B): B = xs match {
case Nil => z
case Cons(x,xs) => f(x,rightFold(xs,z)(f))
}
def sum1(l:List[Int]) = rightFold(l,0.0)(_ + _)
Scalaで覚えておくべき大まかなガイドライン:型推論は完璧ではなく、カレーをかけるとうまくいく傾向があります。 –