第1章 開始 Lisp 之旅 GETTING STARTED WITH LISP

第1章 開始 Lisp 之旅 GETTING STARTED WITH LISP

翻譯者:FreeBluesgit

github版本:https://github.com/FreeBlues/Land-of-lisp-CN程序員

開源中國版本:http://my.oschina.net/freeblues/blog?catalog=516771github

目錄

  • Lisp 方言
    • 兩種 Lisp 的故事 A Tale of Two Lisps
    • Lisp 的前景 Up-and-Coming Lisps
    • 被用於腳本的 Lisp 方言 Lisp Dialects Used for Scripting
    • ANSI Common Lisp
  • 開始 CLISP 之旅
    • 安裝 CLISP Installing CLISP
    • 啓動 CLISP Starting Up CLISP
  • 本章你學到的 What You’ve Learned

本章從介紹 Lisp 的各類方言開始。而後咱們會討論一點 ANSI Common Lisp,也就是咱們將會在本書使用的 Lisp 方言。最後你將會從安裝和試驗 CLISP 開始,這是 ANSI Common Lisp 的一種實現,它將會運行本書中你所建立的全部 Lisp 遊戲程序。編程

Lisp 方言

任何遵照 Lisp 核心原則的程序語言都被認爲是一種 Lisp 方言。既然這些原則是如此簡單,因此絕不奇怪確確實實有一百多種 Lisp 方言被創造出來。事實上,既然這麼多嶄露頭角的 Lisper 創造出他們本身的 Lisp 方言來做爲一種練習,遍佈整個星球可能會有上千種部分完成的 Lisp 沉睡於硬盤的冗長目錄中。然而,絕大多數的 Lisp 社區使用這兩種 Lisp 方言:ANSI Common Lisp(常被縮寫爲 CL)和 Scheme。多線程

在本書中,咱們將僅僅討論 ANSI Common Lisp 方言,它在這兩種方言中稍微流行一些。儘管如此,你從閱讀本書得到的大多數知識也與 Scheme 有關(儘管在兩種方言之間關於函數名字的內容趨於不一樣)。編輯器

兩種 Lisp 的故事 A Tale of Two Lisps

在 ANSI Common Lisp 和 Scheme 之間存在一些深入的哲學思想的不一樣,而且它們引來對不一樣程序員的人身攻擊。一旦你學習到更多 Lisp 語言的知識,你就能決定你更喜歡哪種方言。這裏的選擇不存在對或錯。函數式編程

爲了幫助你作出本身的決定,我爲你建立了下面的我的化測試:函數

C1-1個性測試圖

若是你選擇 A,你喜歡具有原始能力的語言。你不在意你的語言是否有一點醜陋,由於大量出於務實的妥協,只要你仍然能夠寫出緊湊的代碼。ANSI Common Lisp 是你最好的語言!ANSI Common Lisp 追溯它的起源更直接來自原始的 Lisp 方言,創建在數以百萬的程序員小時之上,賦予它極其豐富的功能。當然,它有一些巴洛克式的函數名帶來無數的歷史事故,可是這種 Lisp 確實可以在正確的黑客手中飛翔。工具

若是你選擇 B,你喜歡潔淨和優雅的語言。你對基本編程問題更感興趣 ,而且樂於在美麗的草地上消磨時光,深刻思考你代碼的美麗,偶爾寫寫關於理論計算問題的研究論文。Scheme 就是爲你準備的語言!它在1970年代中期由 Guy L. Steele 和 Gerald Jay Sussman 創造,而且受到一些對理想 Lisp 檢討式的影響。Scheme 的代碼趨於稍微囉嗦,由於比起建立最短程序的可能性, Schemer 更關注他們代碼的數學純粹性。oop

若是你選擇 C,你就是那種但願但願同時獲得二者的人: ANSI CL 的威力和 Scheme 的數學美。如今,尚未任何一種 Lisp 方言徹底符合你的要求,不過這一點將會在將來發生改變。有一種可能知足你要求的語言(儘管在一本 Lisp 書中作出這個斷言是一種褻瀆/不敬)是 Haskell。它不被看作是一種 Lisp 方言,不過它的追隨者們遵照那些流行於 Lisper 中的範例,好比保持語法統一性,支持本地列表,而且嚴重依賴高階函數。更重要的是,它具有極端的數學嚴格(甚至超過 Scheme)容許它把很是強大的功能隱藏在一個機器潔淨的界面下。它本質上就是一隻披着羊皮的狼。跟 Lisp 同樣,Haskell 是這樣一種語言,任何程序員都會在將來對它的研究中獲益。

Lisp 的前景 Up-and-Coming Lisps

就像剛纔提到的,實際上不存在一種 Lisp 方言,它既擁有 ANSI Common Lisp 的強大和靈活,又有 Scheme 的優雅。然而,一些新崛起的挑戰者可能贏得這兩個世界最好的獎盃在不遠的未來。

一種前景很好的新的 Lisp 是 Clojure,由 Rich Hickey 開發的一種方言。Clojure 構建於 Java 平臺之上,使得它得到大量成熟 Java 庫的當即可用的影響。Clojure 還包括一些聰明並且深思熟慮的特性用於簡化多線程編程,使得它成爲一種有用的工具用於爲看起來隨處可見的多核 CPU 編程。

另外一個有趣的挑戰者是 Arc。它是一種主要由著名 Lisper Paul Graham 開發的真正的 Lisp 語言。Arc如今仍然處於開發的早期階段,關於它在其餘 Lisp 之上作了多大改善,還存在不少爭議。它的開發進度目前還在以被凍結同樣的緩慢速度進行着。在任何人宣稱 Arc 將成爲一個有意義的挑戰者以前還須要一段時間。

咱們將在結語中對 Arc 和 Clojure 略做品鑑。

被用於腳本的 Lisp 方言 Lisp Dialects Used for Scripting

一些 Lisp 方言被用於腳本編程,以下:

Emacs Lisp 被流行的() Emacs 文本編輯器用做內部的腳本。

Guile Scheme 在一些開源應用中被做爲一種腳本語言來使用。

Script-Fu Scheme 被用於 GIMP 圖形編輯器。

這些方言是 Lisp 主要分支的更舊版本的分支,而且不多被用於創建獨立的應用程序。然而,他們仍然是完美體面的 Lisp 方言。

ANSI Common Lisp

1981年,爲了應付這種語言那使人眩暈的方言數量,各個不一樣的 Lisp 社區共同起草了一份被稱爲 Common Lisp 的新方言的規格。在1986年,通過一些調整以後,這種語言變成了 ANSI Common Lisp 標準。不少老版本 Lisp 的開發者修改了他們的解釋器和編譯器來使之符合新標準,這個新標準就此成爲最流行的 Lisp 版本而且保持至今。

注意

貫穿本書,術語 Common Lisp 指的是按照 ANSI 標準定義的 Common Lisp 版本。

Common Lisp 的一個關鍵設計目標是建立一種多範式語言,意思是它要包括對許多種不一樣編程模式的支持。你可能據說過面向對象編程,能夠很是好地在 Common Lisp 中作到。其餘你可能沒有據說過的編程模式,包括函數式編程,通用編程以及特定領域語言編程(DSL)。這些在 Common Lisp 中均可以很好地支持。你將會學習這裏的每一種編程模式,一個接着一個,隨着咱們這本書的推動。

開始 CLISP 之旅

不少偉大的 Lisp 編譯器均可以用,不過有一種尤爲容易上手:CLISP,一種開源的 Common Lisp。CLISP的安裝很是簡單,並且能夠運行在任何操做系統上。

其餘流行的 Lisp 包括 Steel Bank Common Lisp (SBCL),一種快速的 Lisp,被認爲比 CLISP 更重型一點;Allegro Common Lisp,由 Franz,Inc 開發的強大的商業 Lisp;Clozure CL;以及 CMUCL。Mac 用戶可能認爲 LispWorks 或 Clozure CL 更容易運行在他們的機器上。然而,對於咱們的目標來講,CLISP 是最好的選擇。

注意

從第12章開始,咱們將會使用一些 CLISP特定的命令,這些命令被認爲是非標準的。不過,直到那一章,Common Lisp 的任一種實現均可以運行本書中的例子。

安裝 CLISP Installing CLISP

你能夠從 http://clisp.cons.org/ 下載一個 CLISP 安裝程序,它能夠在 Windows PC,Mac,以及不一樣變體的 Linux 上運行。在一臺 Windows PC 上,你只要簡單運行一個安裝程序便可。在一臺 Mac 上,有一些額外的步驟,這些細節都在網站上有詳細描述。

在一臺基於 Debian 的 Linux 機器上,你應該能夠發現 CLISP 以及存在你的標準源代碼中了。只須要在命令行輸入

apt-get install clisp

而後,CLISP 就會自動安裝好。

對於其餘的 Linux 發行版本(如 Fedora,SUSE 等等),你可使用列在 CLISP 網站的 「Linux packages」下的標準包。並且,有經驗的 Linux 用戶能夠經過源代碼來編譯 CLISP。

啓動 CLISP Starting Up CLISP

在你的命令行輸入:

clisp

就能夠運行 CLISP。若是一切正常,你將會看到以下的提示畫面:

$ clisp i i i i i i i ooooo o ooooooo ooooo ooooo I I I I I I I 8 8 8 8 8 o 8 8 I \ +' / I 8 8 8 8 8 8 \ -+-' / 8 8 8 ooooo 8oooo `-|-' 8 8 8 8 8 | 8 o 8 8 o 8 8 ------+------ ooooo 8oooooo ooo8ooo ooooo 8

Welcome to GNU CLISP 2.49 (2010-07-07) http://clisp.cons.org/

Copyright (c) Bruno Haible, Michael Stoll 1992, 1993 Copyright (c) Bruno Haible, Marcus Daniels 1994-1997 Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998 Copyright (c) Bruno Haible, Sam Steingold 1999-2000 Copyright (c) Sam Steingold, Bruno Haible 2001-2010

Type :h and hit Enter for context help.

[1]>

和全部的 Common Lisp 環境同樣,CLISP 在你啓動它以後會自動把你帶到它的一個 讀取-求值-打印-循環(REPL)中(read-eval-print loop)。這意味着你能當即開始輸入 Lisp 代碼。

試着輸入:

(+ 3 (* 2 4))

你將會看到結果被打印在這個表達式下面:

[1]> (+ 3 (* 2 4)) 11

這個實驗演示了 REPL 是如何工做的。你輸入一個表達式,而後 Lisp 將會當即求值而且返回結果值。當你想要關閉 CLISP 時,輸入(quit)便可(譯者注:須要連括號一塊兒輸入)。

不論如何你已經讓 CLISP 運行在你的計算機上了,作好準備編寫一個 Lisp 遊戲!

本章你學到的 What You’ve Learned

在本章中,咱們討論了 Lisp 的不一樣方言而且安裝了 CLISP。經過這種方法你學到以下內容:

  • 有兩種主要的 Lisp 方言:Common Lisp 和 Scheme。它們都提供了不少功能,不過在本書中咱們將會聚焦於 Common Lisp。

  • Common Lisp 是一種多範式語言,意味着它支持許多不一樣的編程模式。

  • CLISP 是這樣一種 Common Lisp 實現,它很是容易設置,使得對於一個 Lisp 初學者來講,它是一種出色的選擇。

  • 你能夠從 CLISP 的 REPL 中直接輸入 Lisp 命令。

C1-2漫畫圖

相關文章
相關標籤/搜索