有人可以解釋我lambda表達式&他們可以用於什麼。我用Google搜索了&有個大概的想法。大多數示例都提供了c#代碼。如何在簡單的老C中的lambda表達式?Lambda表達式
回答
實際上有兩件事被稱爲「lambda表達式」,這是相當鬆散的聯繫:
Lambda表達式是lambda calculus基礎部分,是密切相關的功能編程
在命令式語言中,lambda表達式通常是匿名方法的同義詞。在C#中,比如你可以通過lambda表達式作爲參數(即一個表達式本身,而不是它的結果。):
C#:
someCollection.Apply (x => 2*x); // apply expression to every object in collection
// equivalent to
someCollection.Apply (delegate (int x) { return 2 * X; });
話雖如此,C不支持匿名方法。你可以,但是,使用函數指針來實現類似的結果:
int multiply (int x)
{
return 2 * x;
}
...
collection_apply (some_collection, multiply);
據說,蘋果已經添加了一些東西給LLVM添加一種lambda表達式到C(代碼塊或某事)。雖然不是官方標準,但我忘記了確切的搜索條件。 – ndim 2010-04-22 22:57:11
代碼塊是Objective-C的一部分(蘋果公司使用它的大部分高級庫),這是C語言的附加OO語法。 – 2016-07-15 09:43:13
C不支持蘭巴表情......如果你瞭解Perl,我強烈建議書「高階的Perl」,它會給你一個在熟悉的(如果你知道perl)和實際設置的情況下,介紹各種函數式編程技術。
el.pescado的答案是正確的,但他提供的例子有一個簡單的解決方法,使用函數指針。 lambda函數的許多用法不能用c的函數指針來解決。
說你用C寫的這些功能:
int Multiply_1(int x) { return(x*1); }
int Multiply_2(int x) { return(x*2); }
int Multiply_3(int x) { return(x*3); }
int Multiply_4(int x) { return(x*4); }
etcetera, to infinity
這些都是很容易理解。現在假設你想編寫一個函數,Ÿ作爲輸入,並返回一個指針函數Multiply_y():
(int)(int) *Make_Multiplier(int y) { return(Multiply_y); }
其中「Multiply_y」是Multiply_1,Multiply_2等形式的動態創建功能具有一流lambda函數的語言可以做到這一點。
- 1. Lambda表達式
- 2. Lambda表達式
- 3. Lambda表達式
- 4. Lambda表達式
- 5. Lambda表達式
- 6. Lambda表達式
- 7. Lambda表達式
- 8. Lambda表達式
- 9. lambda表達式
- 10. Lambda表達式()
- 11. lambda表達式
- 12. lambda表達式
- 13. Lambda表達式
- 14. Lambda表達式與表達
- 15. LINQ Lambda表達式
- 16. Linq Lambda表達式
- 17. C#Lambda表達式
- 18. 與lambda表達式
- 19. Linq,lambda表達式
- 20. 在lambda表達式
- 21. lambda表達式c#
- 22. 從lambda表達式
- 23. Slow Lambda表達式
- 24. C++ lambda表達式
- 25. Lambda表達式零
- 26. 與lambda表達式
- 27. C#表達式Lambda
- 28. 在lambda表達式
- 29. lambda表達式樹
- 30. Java Lambda表達式
下面的el.pescado,因爲C是一個命令式的語言創建匿名方法(函數)沒有完成。最接近匿名函數的C是通過函數指針,比如傳遞給'qsort(3)'的比較函數指針(但它們並不是真正的匿名,因爲它們需要被定義並因此被命名)。 – msw 2010-04-22 21:57:21