Functional Programming中文叫函數(shù)式編程,所謂的functional programming 就是函數(shù)式編程,這也是一種編程方法,或者說(shuō)是編程模式,同面向過程的編程,以及面向?qū)ο蟮木幊獭⒚嫦蜻壿嫷木幊桃粯印?/p>
定義
所謂的functional programming 就是函數(shù)式編程,這也是一種編程方法,或者說(shuō)是編程模式,同面向過程的編程,以及面向?qū)ο蟮木幊獭⒚嫦蜻壿嫷木幊桃粯印?/p>
編程語(yǔ)言
在最新的visual studio 2010里微軟新增加了一門語(yǔ)言 F? 這門新的語(yǔ)言就是為函數(shù)式編程新開發(fā)的。
微軟計(jì)劃將慢慢整合F#至.NET平臺(tái)并使F#最終成為.NET平臺(tái)的頂峰語(yǔ)言。
眾所周知,F(xiàn)#是一種函數(shù)型程序設(shè)計(jì)(FP,F(xiàn)unctional Programming)語(yǔ)言。然而F#對(duì)IP(Imperative Programming)與OOP(Object Oriented Programming)的支持幾乎一樣的出色。
F?也許終將成為程序核心部分設(shè)計(jì)的首選,而C?與VB等將在用戶界面交互設(shè)計(jì)方面繼續(xù)發(fā)揮其強(qiáng)大的潛力。
函數(shù)式編程是種編程典范,它將電腦運(yùn)算視為函數(shù)的計(jì)算。函數(shù)編程語(yǔ)言最重要的基礎(chǔ)是λ演算(lambda calculus)。而且λ演算的函數(shù)可以接受函數(shù)當(dāng)作輸入(引數(shù))和輸出(傳出值)。
和指令式編程相比,函數(shù)式編程強(qiáng)調(diào)函數(shù)的計(jì)算比指令的執(zhí)行重要。
和過程化編程相比,函數(shù)式編程里,函數(shù)的計(jì)算可隨時(shí)調(diào)用。
歷史
雖然 λ 演算并非設(shè)計(jì)來(lái)于計(jì)算機(jī)上執(zhí)行,但可視為第一個(gè)函數(shù)式編程語(yǔ)言。1980年代末期,Haskell發(fā)布,企圖集合很多函數(shù)式編程研究里的想法。
速度和空間上的顧慮
函數(shù)式編程常被認(rèn)為嚴(yán)重耗費(fèi)在CPU和內(nèi)存資源。主因有二:
1.早期的函數(shù)式編程語(yǔ)言實(shí)現(xiàn)時(shí)并無(wú)考慮過效率問題。
而非函數(shù)式編程語(yǔ)言為求提升速度,會(huì)在某些部分放棄邊界檢查或垃圾回收等功能。
2.緩式評(píng)估亦為語(yǔ)言如Haskell增加了額外的管理工作。
函數(shù)式編程語(yǔ)言特征
純函數(shù)式的程式?jīng)]有變量和副作用。
函數(shù)式編程經(jīng)常使用遞歸。
純函數(shù)式編程語(yǔ)言
因?yàn)榧兒瘮?shù)式程式設(shè)計(jì)語(yǔ)言沒有變量,函數(shù)沒有副作用,編寫出的程式可以利用memoization、common subexpression elimination和平行計(jì)算在運(yùn)行時(shí)和編譯時(shí)得到大量?jī)?yōu)化。
例子
函數(shù)式編程中最古老的例子莫過于1958年被創(chuàng)造出來(lái)的LISP了,透過LISP,可以用精簡(jiǎn)的人力。較現(xiàn)代的例子包括Haskell、Clean、Erlang和Miranda等。
參考資料 >