4

在 Emacs 中,有一些命令可以在括号(或任何括号)中分隔的表达式之间移动光标,即 forward-sexp、backward-sexp、forward-list 和 backward-list。在 Lisp 和任何其他代码中,它们的行为相似,所以我认为 *-sexp 和 *-list 之间没有区别,除了最后一个在注释或引号中不起作用。

sexp 和 list 命令之间的功能区别是什么,我应该什么时候使用?

以防万一,我了解 up-list 和 down-list 命令,它们与主题无关。

4

2 回答 2

5

列表是 s 表达式的一个示例,因此任何对 s 表达式进行操作的函数都应该在列表上工作(但不一定反之亦然,因为也有非列表性)。

elisp 手册说:

用于评估的 Lisp 对象称为“表单”或“表达式”(1)。表单是数据对象而不仅仅是文本这一事实是类 Lisp 语言与典型编程语言之间的根本区别之一。可以评估任何对象,但实际上只有数字、符号、列表和字符串会被经常评估。

---------- 脚注 ----------

(1) 有时也称为“S 表达式”或“sexp”,但我们一般不会在本手册中使用该术语。

C-hig (elisp) Intro Eval RET

于 2012-06-10T10:19:55.373 回答
5

并非所有的 s 表达式都是列表,例如变量是 s 表达式,而它们显然不是列表。

考虑以下示例:

foo (bar)

如果将点放在行首,forward-sexp则将点移动到“foo”的末尾,而forward-list将点移动到“(bar)”的末尾

于 2012-06-11T00:35:58.590 回答