2011-02-15 36 views
10

我在其中一個工作發佈上看到了這個問題,並詢問了什麼是lambda函數,以及它與高階函數的關係。我已經知道如何使用lambda函數,但不是很自信的解釋,所以我做了一個小谷歌搜索,發現這個:What is a lambda (function)?和HOF的它說至少應該採取一種或多種功能或返回函數這個http://en.wikipedia.org/wiki/Higher-order_functionlambda是一種高階函數嗎?

定義適合拉姆達是什麼,所以我的問題是..是拉姆達一種HOF?

還有誰可以進一步解釋他們的關係?

回答

16

HOF的定義,認爲至少應該採取一種或多種功能或返回一個函數符合什麼了lambda

是嗎? (lambda (x) (x+1))(或x => x+1\x -> x+1fun x -> x+1,取決於您的語言的語法)是一個lambda。然而,它既不以函數作爲它的參數(它接受一個int),也不返回一個。

所以不,lambda不一定是更高階的函數,儘管它們可以是。

lambda是一個匿名函數。因此它是一個功能。但它只是一個高階函數,如果它需要或返回一個函數,大多數lambda不會。然而,lambda通常用作更高級函數的參數(即,如果你的確做了Where(s => s.Length > 5)Where是一個更高階的函數而s => s.Length > 5是(一階)lambda),所以它們是相關的。

+0

謝謝,我想我現在明白了。 – Marconi 2011-02-15 04:27:46

0

Lambda語法使得高階函數的實現更容易。例如,通過lambda語法,currying是一個更高級的函數。

您可能想研究lambda 運算符以瞭解更高階的函數。

5

這取決於你的意思是「lambda」。

從鏈接到的Wikipedia頁面的以下段落從類型理論角度清楚地描述了這種關係。

「在無類型演算,所有功能都高階;在一個有類型λ演算,從該最函數式編程語言導出,高階函數一般是那些與含多於一個的箭頭類型。在函數式編程中,返回其他函數的高階函數被認爲是curry。「

換句話說,在類型理論術語中,函數(拉姆達)總是高階在無類型演算,並可以是在有類型λ演算高階...根據其類型簽名。

如果我們談論的是由某些編程語言實現的「lambda」構造,那麼它依賴於1)您正在談論的實際語言,2)關於特定語言的特定用法。

在lambdas是匿名頭等函數的語言中,您會期望它們能夠表達高階函數的能力。但是高階函數是一個函數,它將其他函數作爲參數和/或將其作爲結果返回。並不是所有在應用程序中使用「lambda」都會這樣做。

+0

啊。我應該清楚,這方面的語言是Python。 – Marconi 2011-02-15 04:21:17