部落格推薦:good math, bad math之Lambda運算元簡介

來源:互聯網
上載者:User

Good math,bad math是我最近發現的一個部落格。作者Mark Chu-Carroll寫的一系列關於電腦科學理論的文章深入淺出,通俗易懂,屬於茶餘飯後絕佳的消遣讀物。俺一直想寫點介紹lambda caculus的小文章,但看了他的“My Fravorite Calculus: Lambda”後,就打消了這個念頭。有這麼好的文章,轉貼就行了,自己就不用再寫不入流的文章。今天先轉介紹lamdba calculus的第一部分。先申明一下,俺的翻譯在不影響作者原意的基礎上(但願能做到到),有時也插科打諢加點8卦。如果誰覺得文章垃圾,完全因為俺水平有限。原文絕對精彩。另外,俺數學方面的術語止於大一微積分。所以術語用錯了,還請多多指正。

在電腦科學尤其是是程式設計語言領域,我們常用一種運算元:Lambda Calculus。邏輯學家也常用Lambda Calculus 來研究計算和離散數學結構的本質。其實當初Alanzo Church(就是丘奇-圖靈論點裡的那位丘奇老大了)和Stephen Cole Kleene(就是自動機理論裡Kleene Star那個Kleene了)推出這個Lambda Calculus,也是為了方便他們做邏輯方面的推理,好證明決定性問題。當然以Church和圖靈的天才,沒多久他們便證明圖靈機和lambda calculus具有等價的計算能力。Church提出Lambda Calculus時就懷疑他的理論能被用在其它地方。事實證明他的確高瞻遠矚。Lambda Calculus在編程的理論和實踐兩方面都意義深遠。做理論和做函數編程的且不說。就算是玩兒指令碼語言的老大們,也多半成天和lambda打交道。說來好玩兒,電腦科學理論的發展相當詭異。常常是邏輯學家為了推進邏輯理論提出一個理論,若干年後電腦科學家出於實際需求再“重新發現”一模一樣的理論。 比如說現在很多函數程式設計語言常用的Hindley-Milner類型系統,就是邏輯學家Roger Hindley 於1969年先發現,再由大名鼎鼎的牛人Robin Milner於1978年獨立提出。說遠了。Lambda Calculus本身有若干顯著優點:

  1. 它非常簡單。反正比圖靈機簡單。
  2. 它圖靈完備。也就是說,圖靈機能完成的計算,Lambda Calculus也能完成。
  3. 它易於讀寫。這點很重要。簡單就是力量。我們不可不記。
  4. 它的語義足夠強大,能讓我們用它來推理。
  5. 它的計算模型足夠強大
  6. 容易建立不同的變種,以便我們探索用不同的方式構建計算或語義時的特性

Lambda Calculus易於讀寫意義重大。正是這個優點催生了許多或多或少基於lambda calculus的極為優秀的程式設計語言:Lisp, ML, 和Haskell都在很大程度上基於Lambda calculus開發出來。

Lambda calculus建立在函數這個概念上。純粹的lambda運算元理論中,任何東西都是函數。除了函數外別無它物。不過我們可以用函數搭建出各種東西。其實我們可以從lambda calculus開始,從無到有搭建出整個數學的結構。

牛皮轟轟吧?我們就來看一下lambda calculus為什麼這麼神奇。對任何一個運算元理論來說,我們必須先定義兩個東西。一是句法(syntax),用來描述什麼運算式是合法的;二是一套規則,用來規定我們怎麼對錶達式作合法的符號操作。

Lambda Calculus句法

Lambda calculus 只有三種運算式

  1. 函數定義:在lambda calculus裡一個函數就是一個運算式,寫成lambda x . <函數體>。意思是“一個函數,帶一個參數X,返回計算函數體後得到的結果”。這個時候我們說這個lambda運算式綁定了參數X。
  2. 標識符引用(identifier reference): 一個標識符引用就是一個名字。這個名字和包括這個引用的函數定義裡的參數同名。
  3. 函數應用(function application): 這個更簡單,把要應用的值放到函數定義的後面就行了。比如
    (lambda x . plus x x) y

這麼簡單的定義能幹什麼囁?怎麼沒有多個參數囁?這個就是數學的魅力了。我們很快會發現,多個參數可以被等價的操作(所謂的currying)來代替。而配上簡單的操作後(本質操作就一個:替換),我們就得到了一門強大的程式設計語言,不輸基於圖靈機模型的Algo系列語言,比如C。

欲知後事如何,且聽下回分解。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.