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))