使用 while 循环

只要 while 的真假条件求值为真, 执行体就会被重复执行。这一过程称为循环, 因为解释器会不断重复相同操作,如同飞机盘旋。 当条件求值为假时, Lisp 解释器不再执行 while 剩余部分,退出循环。

显然,如果 while 第一个参数的求值结果始终为真, 后续执行体就会一遍又一遍… 永远执行下去。 反之,如果结果永远为假,执行体中的表达式则永远不会被执行。 编写 while 循环的技巧在于选择合适的机制, 让真假条件恰好只在需要重复的次数内为真, 之后变为假。

while 的返回值是真假条件的求值结果。 一个有趣的结论是:正常执行的 while 循环 无论执行 1 次、100 次还是 0 次,最终都会返回 nil(假)。 成功执行的 while 永远不会返回真值! 这意味着 while 总是依靠副作用发挥作用, 也就是依靠循环体内表达式重复执行带来的效果。 这合乎逻辑:我们需要的不是循环本身, 而是循环体重复执行产生的结果。