8.6 内容回顾

这里简要总结一下最近介绍的一些函数。

car
cdr

car 返回列表的第一个元素;cdr 返回列表中第二个及后续所有元素。

例如:

(car '(1 2 3 4 5 6 7))
     ⇒ 1
(cdr '(1 2 3 4 5 6 7))
     ⇒ (2 3 4 5 6 7)
cons

cons 通过将第一个参数添加到第二个参数头部来构造一个新列表。

例如:

(cons 1 '(2 3 4))
     ⇒ (1 2 3 4)
funcall

funcall 将第一个参数当作函数执行,并把后续参数传递给该函数。

nthcdr

对一个列表连续取 nCDR 后返回结果, 可以理解为 “剩余的剩余(rest of the rest)”。

例如:

(nthcdr 3 '(1 2 3 4 5 6 7))
     ⇒ (4 5 6 7)
setcar
setcdr

setcar 修改列表的第一个元素;setcdr 修改列表的第二个及后续元素。

例如:

(setq triple (list 1 2 3))

(setcar triple '37)

triple
     ⇒ (37 2 3)

(setcdr triple '("foo" "bar"))

triple
     ⇒ (37 "foo" "bar")
progn

依次执行所有参数,并返回最后一个表达式的值。

例如:

(progn 1 2 3 4)
     ⇒ 4
save-restriction

记录当前缓冲区中生效的缩进/缩窄范围,执行完参数后恢复该范围。

search-forward

搜索指定字符串,找到后移动光标。若使用正则表达式,可使用类似的 re-search-forward。 (See Regular Expression Searches, 了解正则表达式模式与搜索。)

search-forwardre-search-forward 接收四个参数:

  1. 要搜索的字符串或正则表达式。
  2. 可选,搜索范围的边界。
  3. 可选,搜索失败时的行为:返回 nil 或抛出错误。
  4. 可选,搜索重复次数;为负数时表示反向搜索。
kill-region
delete-and-extract-region
copy-region-as-kill

kill-region 剪切光标与标记之间的文本,存入删除环, 之后可以通过取回命令恢复。

copy-region-as-kill 复制光标与标记之间的文本到删除环, 但不会从缓冲区中删除文本。

delete-and-extract-region 移除光标与标记之间的文本并直接丢弃, 无法恢复。(该函数不是交互式命令。)