在Emacs中sexp和列表之间的区别?

时间:2012-06-10 10:08:45

标签: emacs elisp delimiter parentheses s-expression

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

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

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

2 个答案:

答案 0 :(得分:5)

列表是s表达式的一个示例,因此对s表达式起作用的任何函数都应该在列表上起作用(但反之亦然,因为还有非列表性别)。

elisp手册说:

  

用于评估的Lisp对象称为“表单”或   “表达”(1)。表单是数据对象而不仅仅是数据对象   text是Lisp类语言之间的根本区别之一   和典型的编程语言。可以评估任何对象,但是   练习只对数字,符号,列表和字符串进行评估   常。

     

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

     

(1)有时也被称为“S表达”或“sexp”,   但我们通常不会在本手册中使用此术语。

C-h i g (elisp) Intro Eval RET

答案 1 :(得分:5)

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

考虑以下示例:

foo (bar)

如果您将该点放在该行的开头,forward-sexp会将该点移动到“foo”的末尾,而forward-list会将该点移动到“(bar)”的末尾