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