標籤:使用 os 資料 art io 代碼
1.2 通往實用函數編程之路
函數式編程的思想發源要早於第一台電腦,其曆史可追溯到上世紀三十年代,當時 Alonzo Church 和 Stephen C. Kleene 引入一種理論,叫 lambda 演算,屬於數學基礎研究。雖然它未能實現其初衷,但仍有一些邏輯分支在使用,並發展出有用計算理論。為了學習函數式編程的基本原理,有必須簡單瞭解一下lambda 演算(下一章)。發明電腦以後,Lambda 演算放棄了它原來的領域,成為早期函數式程式設計語言的靈感。
1.2.1 函數語言
到 2008 年,第一個函數式程式設計語言走過了 50 年的曆史。LISP,由約翰麥卡錫(John McCarthy)於 1958 年建立,直接基於 lambda 演算理論。LISP,一種極其靈活的語言,提出了許多今天仍在使用的編程思想,包括資料結構、垃圾收集和動態類型。
上世紀七十年代,羅賓米爾納(Robin Milner)開發了一種語言,ML,它是包括現在F# 語言系列中的第一個。受類型化 lambda 演算的啟發,ML 添加了類型的概念,甚至能夠像我們現在 .NET 中處理泛型的做法一樣寫泛函數;ML 還有強大的類型推斷機制,這是 F# 能寫出簡潔程式的關鍵。OCaml 出現於 1996 年,是對 ML 語言的務實擴充,它也是最早把的物件導向和函數式方法結合起來的語言之一。F# 深受OCaml 的啟發,為了成為一流的 .NET 語言,且是真正的函數語言,必須將這些範式結合起來。
其他重要的函數語言還有 Haskell (一種純正、優雅的數學語言)和 Erlang (因訊息並發傳遞而著名,我們將在第十六章討論)。我們學習Haskell 和 LISP,更多是有關優於F# 的主題,但首先看一下 F# 的曆史。
1.2.2 .NET 平台上的函數式編程
第一個版本的 .NET 於 2002 年發布,和 F# 語言誕生於同一年。F# 最早是唐賽姆(Don Syme)和同事合作的一個微軟研究項目,其目標是把函數式編程引入 .NET。F# 和類型化函數式編程通常會更加對 .NET 中泛型的需要分量,F# 的設計人員深入參與.NET 2.0 和 C# 2.0 中泛型的設計與實現。
由於在核心架構中實現了泛型,F# 進展更快,在F# 中使用的編程風格也開始改變。它開始是作為支援對象的函數語言,但作為成熟的語言,取兩種風格中的長處似乎更自然。因此,F# 現在更精確地說是一種多範式(multiparadigm)語言,結合了函數式和物件導向的方法,還有一套工具,能夠編寫互動方式指令碼。
[MICROSOFT F#]
F# 是針對 .NET 架構的函數式程式設計語言,它將函數式編程的簡潔性、表現性和組合性風格與.NET 的運行庫、庫、互通性、物件模型結合在一起。[F# 首頁]
F# 自誕生之初就一直是 .NET 的一等公民,它不僅能夠訪問所有標準的 .NET 組件,而且,同樣重要的是,所有其他 .NET 語言也能夠訪問用 F# 開發的代碼,這樣,既可以用 F# 開發獨立 .NET 應用程式,也可以開發大型項目的一部分。F# 一直受Visual Studio 支援,在 2007 年,F# 開始從研究項目轉變為完全產品級的語言;2008 年,微軟宣布 F# 將成為隨 Visual Studio 2010 發布的語言之一。就這一點而言,也應該成為關注 F# 和整個函數範式很好的理由,但現在讓我們看看更務實的原因。