根据目前的讨论,我们可以总结出 Lisp 的另一个重要特性:
像 + 这样的符号,其本身并不是计算机要执行的指令集。
相反,该符号(可能只是临时)被用来定位对应的定义或指令集。
我们看到的只是一个可以用来查找指令的名称。
人名的作用也是如此。我可以被称作 ‘Bob’,但我并不是字母 ‘B’、‘o’、‘b’ 的组合,
而是与某个生命体持续关联的意识。名字并不是我本人,只是可以用来指代我。
在 Lisp 中,同一组指令可以附加到多个名称上。
例如,实现加法运算的计算机指令既可以关联到符号 +,也可以关联到符号 plus
(在某些 Lisp 方言中确实如此)。
在人类社会中,我既可以被称作 ‘Robert’,也可以被称作 ‘Bob’,还可以有其他称呼。
另一方面,一个符号同一时间只能附加一个函数定义。 否则计算机就会困惑该使用哪个定义。 如果人类社会也是如此,那全世界就只能有一个人叫 ‘Bob’。 不过,名称所指向的函数定义可以很方便地修改。(See Install a Function Definition.)
由于 Emacs Lisp 规模庞大,通常会按照功能模块为符号命名。 因此,所有处理 Texinfo 的函数名都以 ‘texinfo-’ 开头, 处理邮件阅读的函数名都以 ‘rmail-’ 开头。