2.4.4 符号类型

GNU Emacs Lisp 中的 symbol符号 是带有名称的对象。符号名称同时作为该符号的打印表示形式。在常规的 Lisp 使用场景中(仅使用一个符号表 obarray,see 创建与编入符号),符号的名称具有唯一性 —— 不存在两个名称相同的符号。

一个符号可作为变量、函数名使用,或用于存储属性列表;也可仅作为与其他所有 Lisp 对象相区分的标识,确保其在数据结构中的出现能被可靠识别。在特定上下文下,通常仅会用到上述一种用途,但你也可以独立地将同一个符号用于所有这些场景。

名称以冒号(‘:’)开头的符号称为 keyword symbol关键字符号。这类符号会自动充当常量,通常仅用于将未知符号与若干特定备选符号做比较。 See 永不改变的变量

符号名称可包含任意字符。

Common Lisp 说明: 在 Common Lisp 中,小写字母会自动转换为大写(除非显式转义);而在 Emacs Lisp 中,大小写字母是完全不同的字符。

以下是多个符号名称示例。注意第四个示例中的 ‘+’ 需转义,避免被解析为数字;第六个示例则无需转义,因为名称的其余部分使其无法被识别为数字。

foo                 ; 符号名称为 ‘foo
FOO                 ; 符号名称为 ‘FOO’,与 ‘foo’ 不同
1+                  ; 符号名称为 ‘1+
                    ;   (而非 ‘+1’ — 后者是整数)。
\+1                 ; 符号名称为 ‘+1
                    ;   (可读性较差)。
\(*\ 1\ 2\)         ; 符号名称为 ‘(* 1 2)’ (更差的名称)。
+-*/_~!@$%^&=:<>{}  ; 符号名称为 ‘+-*/_~!@$%^&=:<>{}’.
                    ;   这些字符无需转义。

符号名称作为其打印表示形式的规则有两个例外:

  1. ##’ 是已录入但名称为空字符串的符号的打印表示;
  2. #:foo’ 是未录入且名称为 foo 的符号的打印表示(通常 Lisp 读取器会录入所有符号, see 创建与编入符号)。

emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike