在 GNU Emacs Lisp 中,一个 符号(symbol) 是带有名称的对象。该 符号名称充当该符号的打印表示形式。在常规 Lisp 使用中,借助单个对象数组(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)’ (更差的名称)。 +-*/_~!@$%^&=:<>{} ; 符号名称为 ‘+-*/_~!@$%^&=:<>{}’. ; 这些字符无需转义。
符号名称作为其打印表示形式的规则有两个例外: