2016-08-13 19 views
1

我正在瀏覽coursera中教授的Scala中的函數式編程視頻。我在這些代碼coursera需要說明scala固定點

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

及其實施之際,

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

但在形式

averageDamp(x => x) 

它說,參數丟失不能使用它。在上述情況下,也不會失去理由。有人幫忙。在此先感謝:)

+0

的多個參數的列表方法偏應用只可能的(a)顯式地(如'averageDamp(X => X)_')或(b)隱式地在一個功能性上下文(如' val f:Double => Double = averageDamp(x => x)')。我的猜測是'fixedPoint'需要'Double => Double',所以我們有選項(b) –

回答

0

關鍵字是currying。當averageDamp定義如上,averageDamp將預期兩個參數。當你只用第一個參數寫它時,它會返回一個函數(閉包),它需要另一個參數。這就是爲什麼當你稱之爲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