Experimenting in the REPL(体验 REPL)
To try the REPL, you need a Lisp expression that can be read, evaluated, and printed. One of the simplest kinds of Lisp expressions is a number. At the Lisp prompt, you can type 10
followed by Return and should see something like this:
为了测试 REPL,需要一个可以被读取、求值和打印的 Lisp 表达式。最简单类型的
Lisp 表达式是一个数。在 Lisp 提示符下,可以输入 10
接着敲回车键,然后看到类似下面的东西:
CL-USER> 10
10
The first 10
is the one you typed. The Lisp reader, the R in REPL, reads the text "10" and creates a Lisp object representing the number 10. This object is a self-evaluating object, which means that when given to the evaluator, the E in REPL, it evaluates to itself. This value is then given to the printer, which prints the 10 on the line by itself. While that may seem like a lot of work just to get back to where you started, things get a bit more interesting when you give Lisp something meatier to chew on. For instance, you can type (+ 2 3)
at the Lisp prompt.
第一个 10
是你输入的。Lisp 读取器,即 REPL 中的 R,读取文本 “10”
并创建一个代表数字 10 的 Lisp
对象。这个对象是一个自求值(self-evaluating)对象,也就是说当把它送给求值器,即
REPL 中的 E 以后,它将对其自身求值。这个值随后被送到打印器里,打印出只有
10 的那行来。整个过程看起来似乎是费了九牛二虎之力却回到了原点,但如果你给了
Lisp 更有意义的信息,那么事情就变得有意思一些了。比如说,可以在 Lisp
提示符下输入 (+ 2 3)
。
CL-USER> (+ 2 3)
5
Anything in parentheses is a list, in this case a list of three
elements, the symbol +
, and the numbers 2 and 3. Lisp, in general,
evaluates lists by treating the first element as the name of a
function and the rest of the elements as expressions to be evaluated
to yield the arguments to the function. In this case, the symbol +
names a function that performs addition. 2 and 3 evaluate to
themselves and are then passed to the addition function, which
returns 5. The value 5 is passed to the printer, which prints it. Lisp
can evaluate a list expression in other ways, but we needn't get into
them right away. First we have to write...
小括号里的东西构成了一个列表,上述列表包括三个元素:符号 +
,以及数字
2 和 3。一般来说,Lisp 对列表求值的时候会将第一个元素视为一个函数的名字,而其他元素作为即将求值的表达式则形成了该函数的实参。在本例里,符号
+
是加法函数的名字。2 和 3 对自身求值后被传递给加法函数,从而返回了
5。返回值 5 被传递给打印器从而得以输出。Lisp
也可能以其他方式对列表求值,但我们现在还没必要讨论它。但从 Hello World 开始。