progn 特殊形式 ¶progn 是一种特殊形式,它会按顺序依次求值其每一个参数,
并返回最后一个参数的值。前面的表达式仅为执行它们产生的副作用而求值,
这些表达式生成的值会被直接丢弃。
progn 表达式的模板非常简单:
(progn body...)
在 zap-to-char 中,progn 表达式需要完成两件事:
将光标精确定位到正确位置;并返回光标位置,
以便 kill-region 知道需要删除到何处为止。
progn 的第一个参数是 search-forward。
当 search-forward 找到目标字符串时,该函数会将光标置于
目标字符串最后一个字符的紧后方。(本例中目标字符串仅有一个字符长度。)
如果是反向搜索,search-forward 会将光标置于目标字符串
第一个字符的紧前方。光标的移动属于副作用。
progn 的第二个也是最后一个参数是表达式 (point)。
该表达式会返回当前光标位置的值,在本例中即为被 search-forward
移动后的光标位置。(在源码中,有一行用于让函数在向前搜索时回退到前一个字符的代码
已于 1999 年被注释;我已不记得这一功能或缺陷是否曾出现在发布版源码中。)
progn 表达式会返回 point 的值,并将其作为
kill-region 的第二个参数传入。