Lisp 入門/第一章 基礎

維基教科書,自由的教學讀本

第一章 函數[編輯]

這幾章,我們會講解一下 lisp 的基本概念。在講解基本概念之前,我們先要學會使用 Lisp 的解釋器。解釋器基本上是這個樣子的:你給解釋器一個表達式(也就是你在鍵盤上打字),而解釋器顯示這個表達式的值(就是給你一個答案)。

現在,往解釋器里輸入 42 這個數字,並且按回車鍵,看看解釋器會給你什麼反饋。

42

解釋器會返回同一個數:

42

數學表達式[編輯]

LISP 可以算數學題,不過,你要先學會 LISP 的表達方式才行。 比如

1+2

這個數學式子,在 LISP 中會表示為:

(+ 1 2)

也就是說,在 LISP 中,數學表達式要用括號括起來,並且運算符要放在第一個,運算數放在後面,中間用必要的空格隔開。上面表達式中的運算符,即第一個符號,稱之為 操作符,而其他的符號,稱為 操作域。這種把操作符放在第一個位置的表達方式,稱之為 前綴表示法,也被叫做 波蘭表示法

你把上面的式子輸入到 LISP 解釋器中,按下回車鍵看看會出現什麼現象。

數字 3 會出現 。

在 Common Lisp中,我們輸入一個式子,而Lisp的解譯器告訴我們結果。 這樣,我們就擁有了一個計算器,那麼,我們可以把玩一下這個計算器。比如,依次輸入下列算式,看看結果是什麼。

(- 3 2)
(* 6 7)
(/ 8 6)

第一行的結果是 1,第二行的結果是 42。 第三行的結果竟然是 4/3。看來,LISP 還是很智能的,知道用分數來表示結果。

而且,即使再複雜點的數學表達式,LISP 也能計算。

(+ 1 2 3 4)
(* (+ 2 4) 7)

函數的表達方式[編輯]

Lisp語言的是一種函數式語言。所謂函數是說,它的語句就像數學中的函數表達式的作用是一樣的。 雖然概念一樣,然而在表達上還是有些出入的。

在數學中,我們會這樣表示一個函數

同樣的函數,在Lisp中我們會這樣表示:

(f x)

在數學中,函數是一個函數名,後面跟著一個括號,括號裡面裝著參數。但在 LISP 中,整個函數表達式用括號括起來,第一個元素是函數的名稱,後面跟著函數的參數。

如果是有兩個參數(在一些立體幾何的函數中就會有這樣的例子),比如

聰明的你們應該可以猜出來是這樣寫的:

(f x y)

因為加法符號可以看成是一個二元函數,所以,我們可以這樣寫:

+(1,1)

那麼,寫成 LISP 的形式,就是

(+ 1 1)

現在,你知道為什麼數學表達式中運算符要放在最前面了吧。

複合函數如:

f(g(x))

在 LISP 中會寫成

(f (g x))

在Lisp中,表達式是很重要的概念。你每次輸入的表達式,都會被求值。

我們可以嘗試一下 LISP 中自帶的函數

(sqrt 9)

sqrt 表示開方的意思,這句話的意思就是對9開方,返回的結果自然是3了。

(log 16 2)

這句話表示求以2為底16的對數。

邏輯運算[編輯]

邏輯運算,就是關於真假的運算,我們應該先習慣 LISP 的語法,那麼 3<4 該如何寫呢?

(< 3 4)

上面這個式子的結果是

T

在 LISP 中,T 代表邏輯真,而 NIL 代表邏輯假。暫且不用太追究名稱的由來,後面我會告訴你的。

接下來,嘗試一個邏輯與表達式:

(and T T)

就是真且真為真。

或的英語翻譯是OR。

(OR T NIL)

順帶告訴大家,在Lisp中大小寫不重要。

最後來個最複雜的

(or (> 3 4) (> 4 2))