在LISP语言中,符号是表示数据对象和有趣的是它也是一个数据对象的名称。
是什么使得符号特殊之处在于他们有分别叫property list,或%uA0plist.
属性列表
LISP可以让属性,以符号分配。例如,我们有一个&apos人&apos的对象。希望这个&apos人&apos的对象有像姓名,性别,身高,体重,住址,职业等属性是一些属性名称。
一个属性列表被实现为具有元素为偶数(可能为零)的列表。每对列表中的元素构成一个条目第一个项目是指标,而第二个是该值。
当创建一个符号,它的属性列表最初是空的。属性是使用于asetf形式得到建立。
例如,下面的语句使我们能够分配属性标题,作者和出版商,以及相应的值,命名(符号)&apos书&apos的对象。
示例 1
创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:
((write (setf (get &aposbooks&apostitle) &apos(Gone with the Wind))) (terpri) (write (setf (get &aposbooks &aposauthor) &apos(Margaret Michel))) (terpri) (write (setf (get &aposbooks &apospublisher) &apos(Warner Books)))
当执行代码,它返回以下结果:
(GONE WITH THE WIND) (MARGARET MICHEL) (WARNER BOOKS)
各种属性列表功能允许你指定的属性以及检索,替换或删除一个符号的属性。
get 函数返回符号的属性列表对于一个给定的指标。它的语法如下:
get symbol indicator &optional default
get 函数查找指定的指标给定的符号的属性列表,如果找到则返回相应的值否则默认返回(或nil,如果没有指定默认值)。
示例 2
创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:
(setf (get &aposbooks &apostitle) &apos(Gone with the Wind)) (setf (get &aposbooks &aposauthor) &apos(Margaret Micheal)) (setf (get &aposbooks &apospublisher) &apos(Warner Books)) (write (get &aposbooks &apostitle)) (terpri) (write (get &aposbooks &aposauthor)) (terpri) (write (get &aposbooks &apospublisher))
当执行代码,它返回以下结果:
(GONE WITH THE WIND) (MARGARET MICHEAL) (WARNER BOOKS)
symbol-plist函数可以看到一个符号的所有属性。
示例 3
创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:
(setf (get &aposannie &aposage) 43) (setf (get &aposannie &aposjob) &aposaccountant) (setf (get &aposannie &apossex) &aposfemale) (setf (get &aposannie &aposchildren) 3) (terpri) (write (symbol-plist &aposannie))
当执行代码,它返回以下结果:
(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43)
remprop函数从符号中删除指定的属性。
示例 4
创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:
(setf (get &aposannie &aposage) 43) (setf (get &aposannie &aposjob) &aposaccountant) (setf (get &aposannie &apossex) &aposfemale) (setf (get &aposannie &aposchildren) 3) (terpri) (write (symbol-plist &aposannie)) (remprop &aposannie &aposage) (terpri) (write (symbol-plist &aposannie))
当执行代码,它返回以下结果:
(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43) (CHILDREN 3 SEX FEMALE JOB ACCOUNTANT)