Scalaでカレー機能がどのように機能するのかちょっと混乱します。 次のコードをコンパイルしていますが、わかりません。Scalaでカルト関数を呼び出す?
def fixedPoint(f: Double => Double, initialGuess: Double) = {
//dummy impl, does nothing.
}
def averageDamp(f: Double => Double)(x: Double) = (x + f(x))/2
def sqrt(x: Int) = {
fixedPoint(averageDamp(y => x/y))(1)
}
このコードは罰金コンパイルが、私はまた、別のパラメータを取るためにaverageDamp
ニーズを考えているのでしょうか?だから、次のようになります。
fixedPoint(averageDamp(y=> x/y)(1))(1)
しかし、これはコンパイルできない、と私は型の不一致を言うメッセージが表示されます。見つかった:ダブルが必要:ダブル⇒ダブルを
を次は理にかなっている、コンパイルされません:「オブジェクトfoo適用されていない方法でメソッドaverageDampの引数リストを逃すことだけです:
val num = averageDamp(y => x/y)
これはコンパイルエラーメッセージを表示します関数型が期待されるときには 関数に変換されます。
fixedPointの呼び出しの中でaverageDampを1つのパラメータで呼び出すときにコンパイルされる理由はわかりませんが、それを単独で呼び出すとコンパイルできません。
助けがあれば助かります。
申し訳ありませんが、誤植。 – user1974753
実際にコンパイルすると主張するコードは、パラメータがないために発生しません... –