# 9.2 定义符号(DONE)

定义(definition) 是一类特殊的 Lisp 表达式，该表达式用来指明某个符号的使用方式。当你定义一个符号时，你可以为这个符号提供一个初始值以及一段自解释的文档。

defvar 和 defconst 是两个特殊式，它们用来将符号定义为全局变量。顾名思义，全局变量是指，你可以在 Lisp 程序中的任何位置访问到这个变量。详情查阅 变量章。使用 defcustom 宏，可以定义 customizable 变量，而这个宏调用了 defvar 作为其子例程。（详情查阅 customization）

原则上说，你可以使用 setq 为任何一个符号指定一个变量值，不论该符号是否已经被定义为变量。不过，你需要为每一个你想使用的全局变量做变量定义，否则，在启用词法作用域时， Lisp 可能无法正确求值。

defun 将符号定义为函数。defun 首先创建一个 lambda 表达式，然后将其储存在符号的 function 部分内（术语“函数定义”，是指符号的function 部分），这个lambda表达式即为该符号的函数定义。（术语函数定义是指该符号function部分内储存的内容）defsubst 和 defalias 是另外两个定义函数的方法。详情查阅 函数章。

defmacro 将符号声明为宏。defmacro 创建一个宏对象，然后将其储存在符号的 function 部分内。需要注意的是，函数和宏共用了符号的 function 部分，因此不能使用同一个符号同时保存函数定义和宏定义，否则会出现命名冲突。详情查阅 宏章。

前面提到，Emacs Lisp 允许同一个符号同时声明为变量（使用 defvar）和函数（或宏）（使用 defun），这样的定义行为并不冲突。

这些定义还可以辅助编程。比如，C-h f 和 C-h v 命令创建帮助 buffer，用来检查符号的详细信息。详情查阅 The GNU Emacs Manual 的 Name Help 中。（注意，不是本文档，本文档是Elisp Manual）
