progn
特殊形式progn
是一种特殊形式,它导致按顺序评估其每个参数,然后返回最后一个参数的值。前面的表达式仅为它们执行的副作用而进行评估。它们产生的值被丢弃。
progn
表达式的模板非常简单:
(progn body…)
在‘zap-to-char‘中,progn
表达式必须执行两个操作:将点放置在准确的位置,并返回点的位置,以便kill-region
知道要删除多远。
progn
的第一个参数是search-forward
。当search-forward
找到字符串时,该函数将点立即置于目标字符串的最后一个字符之后。(在本例中,目标字符串只有一个字符长。)如果搜索是向后的,则search-forward
将点置于目标的第一个字符之前。点的移动是一个副作用。
progn
的第二个也是最后一个参数是表达式(point)
。此表达式返回点的值,而在这种情况下,它将是由search-forward
移动到的位置。(在源代码中,一行指示函数转到前一个字符(如果它是向前的)的代码在1999年被注释掉了;我不记得这个功能或错误是否曾经是分布源代码的一部分。)point
的值由progn
表达式返回,并作为kill-region
的第二个参数传递。