【问题标题】:Difference between sexp and list in Emacs?Emacs中sexp和list的区别?
【发布时间】:2012-06-10 10:08:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: emacs elisp delimiter parentheses s-expression


    【解决方案1】:

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

    elisp 手册说:

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

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

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

    C-hig (elisp) Intro Eval RET

    【讨论】:

      【解决方案2】:

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

      考虑以下示例:

      foo (bar)
      

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

      【讨论】:

        猜你喜欢
        • 2011-04-23
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-04
        相关资源
        最近更新 更多