while 循环 ¶只要 while 的真假条件求值为真,
执行体就会被重复执行。这一过程称为循环,
因为解释器会不断重复相同操作,如同飞机盘旋。
当条件求值为假时,
Lisp 解释器不再执行 while 剩余部分,退出循环。
显然,如果 while 第一个参数的求值结果始终为真,
后续执行体就会一遍又一遍… 永远执行下去。
反之,如果结果永远为假,执行体中的表达式则永远不会被执行。
编写 while 循环的技巧在于选择合适的机制,
让真假条件恰好只在需要重复的次数内为真,
之后变为假。
while 的返回值是真假条件的求值结果。
一个有趣的结论是:正常执行的 while 循环
无论执行 1 次、100 次还是 0 次,最终都会返回 nil(假)。
成功执行的 while 永远不会返回真值!
这意味着 while 总是依靠副作用发挥作用,
也就是依靠循环体内表达式重复执行带来的效果。
这合乎逻辑:我们需要的不是循环本身,
而是循环体重复执行产生的结果。