函式式程式設計

函式式程式設計

函式式程式設計是一種設計、編制和調試函式式程式的技術,是由一些原始函式、定義函式和函式型組成的函式表達式。函式語言以λ-演算為其語義基礎, 它的基本機制是函式對參數的作用, 函式是程式的基本項, 程式的編制便是函式的遞歸構造過程。

基本介紹

  • 中文名:函式式程式設計
  • 外文名:Functional programming in Standard ML
  • 語義基礎:λ-演算
  • 組成:原始函式、定義函式和函式型
  • 實質:函式的遞歸構造過程
  • 套用學科:計算機科學、儀器科學、數學
特性,用途,重要性,函式語言,

特性

傳統程式設計語言中的賦值等概念,在函式式程式設計語言中消失。函式式程式的一個最本質的特性,就是函式值唯一地由其參數值所確定。只要使用相同的參數值,對此程式的不同的調用總是得到相同的結果。這種性質稱為引用透明性,有助於程式的模組化。函式式程式設計語言具有較強的組織數據結構的能力,可以把某一數據結構(如數組)作為單一值處理;可以把函式作為參數,其結果也可為函式,這種定義的函式稱為高階函式。這些由函式表達式所表示的程式簡明、緊湊和易於維護。
過去,這種程式設計稱為套用性程式設計。1977年,J.巴克斯提出函式式程式設計的概念。一般認為表處理語言(LISP)是最早的函式式程式設計語言。但是,LISP的重點是將函式套用於對象,以產生新的對象,必要時再上升為函式。巴克斯所提出的函式式程式設計,則是引用函式型產生新函式,程式設計時從一般的對象空間上升到函式空間,因而具有優越的數學性質,有助於程式的理解、推理和驗證。

用途

由於函式式程式設計語言的簡明性和獨特的表達能力,可用它來研究傳統程式設計語言的語義。一種方法是用於確定一個解釋程式的定義,作為被研究的語言的語義;另一種方法是將被研究的語言寫成的程式轉換成與之等價的函式式程式。在人工智慧領域中,需要用複雜的算法去處理一些複雜的(通常是符號的)數據結構。LISP語言成功地套用於這一領域,說明了函式式程式設計的獨特優越性。巴克斯分析了傳統程式設計語言的缺陷,認為這些缺陷主要是由於諾伊曼式系統結構所造成的。他所提出的函式式程式設計(簡稱FP),擺脫了傳統的諾伊曼計算機結構,需要一種新的非諾伊曼式的系統結構為後援。一些具有新概念的計算機,如歸約機、數據流機,以及專為某種函式式語言(如FP)設計的計算機正在研究和發展中。現代既需要研究在諾伊曼式計算機上如何更有效地實現函式式程式設計語言的問題,也需要研究適應這種語言的新型計算機結構。

重要性

函式式程式設計受到重視的原因有很多。首先,由於產生了“軟體危機”,人們企圖探討一種擺脫這種困境的新型程式設計方式,而函式式程式設計具有不少獨特之處。其次,超大規模積體電路技術的發展,為發揮函式式程式設計語言的潛在並行性提供了物質基礎。可以預期,一些具有諸如高度並行性等特點的非諾伊曼式計算機將會出現。隨著硬體技術的發展、軟體方法的研究,以及套用範圍的不斷擴大,函式式程式設計將得到發展,並在新一代計算機系統中起重要作用。

函式語言

函式語言以λ-演算為其語義基礎,它的基本機制是函式對參數的作用,函式是程式的基本項,程式的編制便是函式的遞歸構造過程。從數學觀點看,函式是從一個域(定義域)到另一個域(值域)的映射,即函式描述了兩個域上元素的對應關係。因此,函式語言是一種描述性語言,它只給出需求解問題的定義而不需給出具體的求解過程和細節。求解過程是語言本身經過套用一系列重寫規則實現的。λ-演算作為一個重寫系統滿足合流性,即一個項若有範式,則不同的重寫策略將導致相同範式,從而保證程式求解的唯一性。
由上可知,函式語言具有相當清晰簡明的指稱語義和重寫操作語義,這對程式正確性驗證尤為重旁。函式語言的主要優點是:(1)數學優美性,(2)簡單性,(3)引用透明性。正是由於這些優點,所以易於語言編寫程式,且程式易讀易維護,程式也很短小簡練。特別地,程式具有較好的代數性質,易於程式演繹和正確性驗證。引用透明性帶來的另一個主要優點是程式具有天生的並行性。
最早的函式語言可數Lisp,是McCarthy在1960年創立的,其初始動機是為考慮匿名函式的表示,開發一個用於Al的代數表處理語言。
應該說在Lisp開發早期卜演算的影響甚微,但由於Lisp本身有很好的數學優美性,它對函式語言的發展產生了重大影響。Lisp至今仍是最流行的函式語言,主要用於智慧型系統的編程。出於效率的考慮,它現已變成一種不純的、有副作用的函式語。

熱門詞條

聯絡我們