8.1.3 search-forward函数

search-forward函数用于在zap-to-char中定位要删除的字符。如果搜索成功,search-forward将光标立即置于目标字符串的最后一个字符之后。(在zap-to-char中,目标字符串只有一个字符长。zap-to-char使用char-to-string函数确保计算机将该字符视为字符串。)如果搜索是向后的,search-forward将光标放在目标的第一个字符之前。此外,search-forward返回t表示真(移动光标因此是一个副作用)。

zap-to-char中,search-forward函数如下:

(search-forward (char-to-string char) nil nil arg)

search-forward函数接受四个参数:

  1. 第一个参数是目标,即要搜索的内容。这必须是一个字符串,例如‘"z"’。

    正好传递给zap-to-char的参数是一个单个字符。由于计算机的构造方式,Lisp解释器可能会将单个字符视为与字符串不同。在计算机内部,单个字符具有与一个字符的字符串不同的电子格式。(计算机中通常可以用一个字节精确地记录一个单个字符;但字符串可能更长,计算机需要为此做好准备。)因此,zap-to-char函数接收的字符必须在计算机内部从一种格式转换为另一种格式;否则,search-forward函数将失败。使用char-to-string函数进行此转换。

  2. 第二个参数限制了搜索的范围;它指定为缓冲区中的位置。在这种情况下,搜索可以到达缓冲区的末尾,因此未设置边界,第二个参数为nil
  3. 第三个参数告诉函数如果搜索失败应该做什么——它可以发出错误(并打印一条消息),或者返回nil。将nil作为第三个参数会导致函数在搜索失败时发出错误。
  4. search-forward的第四个参数是重复计数——要查找字符串的出现次数。此参数是可选的,如果函数在没有重复计数的情况下调用,则此参数将传递值1。如果此参数为负数,则搜索将向后进行。

在模板形式中,search-forward表达式如下:

(search-forward "target-string"
                limit-of-search
                what-to-do-if-search-fails
                repeat-count)

接下来我们将看一下progn