Lisp 通常会打印一个提示符告诉你,它正在等待你的输入。许多 Common Lisp 的实现用 作为顶层提示符。本书也沿用这个符号。
一个最简单的 Lisp 表达式是整数。如果我们在提示符后面输入 1
,
系统会打印出它的值,接着打印出另一个提示符,告诉你它在等待更多的输入。
在这个情况里,打印的值与输入的值相同。数字 1
称之为对自身求值。当我们输入需要做某些计算来求值的表达式时,生活变得更加有趣了。举例来说,如果我们想把两个数相加,我们输入像是:
> (+ 2 3)
在日常生活中,我们会把表达式写作 2 + 3
,但在 Lisp 里,我们把 +
操作符写在前面,接着写实参,再把整个表达式用一对括号包起来: (+ 2 3)
。这称为前序表达式。一开始可能觉得这样写表达式有点怪,但事实上这种表示法是 Lisp 最美妙的东西之一。
举例来说,我们想把三个数加起来,用日常生活的表示法,要写两次 号,
而在 Lisp 里,只需要增加一个实参:
(+ 2 3 4)
日常生活中用 +
时,它必须有两个实参,一个在左,一个在右。前序表示法的灵活性代表着,在 Lisp 里, +
可以接受任意数量的实参,包含了没有实参:
表达式可以嵌套。即表达式里的实参,可以是另一个复杂的表达式:
3
上面的表达式用中文来说是, (七减一) 除以 (四减二) 。
Lisp 表示法另一个美丽的地方是:它就是如此简单。所有的 Lisp 表达式,要么是 这样的数原子,要么是包在括号里,由零个或多个表达式所构成的列表。以下是合法的 Lisp 表达式:
稍后我们将理解到,所有的 Lisp 程序都采用这种形式。而像是 C 这种语言,有着更复杂的语法:算术表达式采用中序表示法;函数调用采用某种前序表示法,实参用逗号隔开;表达式用分号隔开;而一段程序用大括号隔开。