跳至内容

Lisp 编程/Lisp 入门

来自维基教科书,开放的书籍,开放的世界

Lisp 的语法非常简单,易于理解。一个列表是一系列用圆括号括起来的原子,列表的第一个原子是一个函数。第一个原子之后的任何原子都是该函数的参数。一个示例 Lisp 表达式,用于将数字 1 和 2 相加,可能看起来像这样

(+ 1 2)

如您所见,该表达式是一个列表。第一个原子是 +,它也是要计算的函数。1 和 2 是 + 函数的参数。

您还可以像这样将列表用作函数的参数,它将数字 1 和 2 相加,但稍微花哨一些

(+ 1 (+ 1 1))

在这个例子中,+ 函数的第二个参数是一个列表。第一个原子是一个函数:+。所以内部列表被计算为 2(1+1=2),然后该结果被用作外部列表的第二个参数,然后给出结果 3。

当然,Lisp 中还有许多其他函数。一些最基本的函数是:+、-、/、*、quote、set 和 cons。+、-、* 和 / 函数的功能和工作原理应该很明显。

quote 函数返回它的第一个参数,不进行求值。这对于将一个形式(表达式)传递给函数,而不首先计算该形式(表达式)非常有用。

(quote (param1 param2))

将返回

(param1 param2)

quote 也可以缩写为 '。' 位于它作用于的列表的“外部”。所以

'(param1 param2)

将返回

(param1 param2)

就像第一个例子一样。

cons 函数通过向列表添加项目来构建列表。向空列表 '() 添加项目会创建一个新列表。

(cons 1 '())

返回

(1)
(cons 1 (cons 2 (cons 3 '())))

返回

(1 2 3)

Lisp 的许多属性都源于列表是由 cons 构建的事实。

在 Lisp 中,有几种方法可以设置变量。以下是最常见的几种方法。

Setq 将变量设置为给定值。如果变量不存在,则创建它。所有使用 setq 创建的变量都是全局变量。Setq 的工作方式如下

(setq variable-name <value>)

使用 setq 的示例代码段如下

(setq camel "I am a camel!")
(print camel)

它应该在执行时打印“我是一只骆驼!”。

华夏公益教科书