《Successful Lisp》Chapter 3 - Essential Lisp in Twelve Lessons
Lesson 5 - Naming and Identity读书笔记.
符号即名称
一个符号就是一个名称,即:符号可以求值返回自身.这种使用符号其名的特性,使得lisp在一些特殊情况下不需要像其它没有符号这种数据类型的语言一样,由语言的使用者思考怎样描述与表达所谓的字面意思,并构造这些数据的操作方法,因为符号不仅提供了它绑定的对象用来使用,还提供了自己的名字以供使用.
符号是唯一的
同名的符号是唯一的
(eq 'a 'a)
->T
(eq 'ls 'LS);注意,CL不区分大小写
->T
(eq '我 '我)
->T
(setq 我 '某人)
->大爷
(eq 我 '某人)
->T
符号可以为值命名
正如之前解释过的,符号与值的关系,犹如标签与物件一般,标签上写着物件的名字.根据求值规则或应用环境的不同,CL的符号会表现出多个值,最常见的同一个符号因求值规则,既能提供函数值又能提供变量值(如下例),这是因为CL拥有两个命名空间,而CL因此被分为Lisp-2类语言.符号还可以同时拥有文档,属性表和打印名称.符号的文档被创建用来描述符号.
(setq first '第一)
->第一
(first '(1 2 3))
->1
first
->第一
(documentation + 'function) ;通过广义函数documentation获得符号+的函数值的文档
-> nil
同一个值可以拥有多个名字
好比王小明有着小名小明以及明明.
对于符号来说就是多对一的关系,用C语言的思维来讲,就是多个指针指向同一块内存地址.不过Lisp隐藏了几乎所有与计算机硬件有关的细节.当对两个符号使用谓词eq返回nil时,我们可以确定这两个符号本质上是同一个东西,也就是两个指针指向同一块内存,而不是装着相同数据的两块内存.