跳转到内容

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