2016-08-13 13 views
1

私はcourseraで教えられたScalaのFunctional Programmingのビデオを見ていました。私は説明courseraからのscala固定小数点

def sqrt(x: Double): Double = fixedPoint(averageDamp(y => y/x))(1) 

としてこれらのコード

def averageDamp(f: Double => Double)(x: Double) = (x + f(x))/2 

とその実装に出くわしたが、これは、引数が不足しているという形

averageDamp(x => x) 

でそれを使用することができませんでした。上のケースでも引数が欠落していませんか?誰か助けてください。ありがとうございます。

+0

部分アプリケーションのみ可能である(a)は、明示的(_' 'averageDamp(X => x)のような)又は(b)暗黙的に機能的文脈で('のようなval f:Double => Double = averageDamp(x => x) ')。私の推測では、 'fixedPoint'は' Double => Double'を必要とするので、オプション(b) –

答えて

0

このキーワードはcurryingです。上記のように定義されたaverageDampの場合、averageDampは2つのパラメータを期待します。最初のパラメタだけで書くと、別の引数をとる機能(クロージャ)が返されます。それはaverageDamp(x => x)のようにそれを呼び出すときそれはargument is missingと言う理由。あなたは、パラメータを必要とする関数なしで関数を呼び出すだけです。値を実際に評価するには、averageDamp(some_function)(double_value)のように呼び出す必要があります。

アウトこれ:複数のパラメータリストの方法のhttp://www.codecommit.com/blog/scala/function-currying-in-scala

+0

を '最初のパラメータで呼び出すと関数(クロージャ)を返します。関数コンテキストでScalaが関数を期待していて、欠けているものが完全なパラメータリストでない限り、最初のパラメータ(ここでは技術的に最初の**パラメータリスト**)だけを呼び出すことはできません。 –

+0

あなたは正しい動詞がここで正しい動詞ではありません。 – alpert

+0

私は平方根を計算していました。それでもまだ使用できません:averageDamp(y => x/y)(1) – ramzavil

関連する問題