簡體   English   中英

C / C ++中的函數式編程?

[英]Functional programming in C/C++?

我一直在閱讀這篇文章: http//en.wikipedia.org/wiki/Function_pointer ,我有點困惑。 由於C / C ++支持函數指針,這是否意味着它們通常支持函數式編程? 請注意,我實際上並不想使用C或C ++進行函數式編程,但我很好奇,因為我從未聽說過C或C ++支持這樣的事情。 (我知道C語言中存在許多函數式編程語言的編譯器,但這並不是我所說的“支持”)。

函數式編程(如果你真的感興趣,請查閱它)與函數指針或缺少函數指針幾乎沒有關系。

C ++是一種多范式語言,對FP有很多支持,尤其是后來的版本。 許多人使用WG21像FP一樣,並尋求支持。 在C ++ 11中,我們甚至得到了lambda和C ++ 14多態lambda首次亮相。 這涉及很多事情。 雖然職能是二等公民,但lambda可以接管罰款。

不幸的是,尾遞歸處理仍然不是強制性的,但是編譯器實際上處理它,並且在過去的十年中,當你剛剛搞砸const過載時,甚至可以方便地報告“無限遞歸”。 :)

你可以在C ++中使用FP風格走得很遠,學習它可以幫助你制作更好的代碼,即使你選擇其他風格。 我鼓勵大家學習SICP

編輯:我不確定為什么這個答案會如此討厭。 這個問題專門詢問函數指針 ,以及它們的存在是否意味着C ++支持“一般的函數式編程”。

以某種技術性的,非常有用的方式:是*。 “功能”編程的真正本質是功能是價值。 C和C ++在諸如輕松創建和破壞詞法閉包之類的東西方面不會給你任何幫助,在部分應用方面也不會給你任何好處。 事實上,您可以使用函數指針來模擬函數的外觀,它們的行為類似於值,這實際上只是等效表達性語言的結果。 試圖將其與“函數式編程”混淆,實際上是深入了解圖靈的tarpit。

*為了真正的技術區別,C和C ++實際上沒有任何函數類型的 函數指針與函數值不同,即使它們在斜視時看起來有點類似。

您可以使用C ++進行函數式編程,盡管該語言並不完全有用。 一階函數編程,你只需盡可能地使用不可變值就足夠了,雖然不是很簡單,但實際上你可以實現monad

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM