1.9.2 计数

下面这个例子展示了如何用 setq 实现计数器。你可以用它统计程序某部分的重复执行次数。首先将变量设为 0,之后每次程序重复时都将该数字加 1。实现需要一个作为计数器的变量和两个表达式:初始化用的 setq 表达式(将计数器设为 0),以及每次求值时递增计数的 setq 表达式。

(setq counter 0)                ; 我们称之为初始化语句

(setq counter (+ counter 1))    ; 这是递增语句

counter                         ; 这是计数器本身

(‘;’ 后面的内容是注释。See Change a Function Definition。)

先对第一个表达式(初始化语句 (setq counter 0))求值,再对第三个表达式 counter 求值,回显区会显示数字 0。接着对第二个表达式(递增语句 (setq counter (+ counter 1)))求值,计数器的值会变为 1。再次对 counter 求值,回显区会显示数字 1。每执行一次递增语句,计数器的值就会加 1。

对递增语句 (setq counter (+ counter 1)) 求值时,Lisp 解释器首先对最内层列表(加法表达式)求值。为计算该列表,它需要先对变量 counter 和数字 1 求值。对 counter 求值会得到其当前值,该值与数字 1 一起传给 + 完成相加。求和结果作为内层列表的返回值,再传给 setq,将变量 counter 设为这个新值。这样,变量 counter 的值就被更新了。