位置:首页 > 高级语言 > Lisp教程 > LISP符号

LISP符号

在LISP语言中,符号是表示数据对象和有趣的是它也是一个数据对象的名称。

是什么使得符号特殊之处在于他们有分别叫property list,或 plist.

属性列表

LISP可以让属性,以符号分配。例如,我们有一个'人'的对象。希望这个'人'的对象有像姓名,性别,身高,体重,住址,职业等属性是一些属性名称。

一个属性列表被实现为具有元素为偶数(可能为零)的列表。每对列表中的元素构成一个条目;第一个项目是指标,而第二个是该值。

当创建一个符号,它的属性列表最初是空的。属性是使用于asetf形式得到建立。

例如,下面的语句使我们能够分配属性标题,作者和出版商,以及相应的值,命名(符号)'书'的对象。

示例 1

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:

((write (setf (get 'books'title) '(Gone with the Wind)))
(terpri)
(write (setf (get 'books 'author) '(Margaret Michel)))
(terpri)
(write (setf (get 'books 'publisher) '(Warner Books)))

当执行代码,它返回以下结果:

(GONE WITH THE WIND)
(MARGARET MICHEL)
(WARNER BOOKS)

各种属性列表功能允许你指定的属性以及检索,替换或删除一个符号的属性。

get 函数返回符号的属性列表对于一个给定的指标。它的语法如下:

get symbol indicator &optional default 

get 函数查找指定的指标给定的符号的属性列表,如果找到则返回相应的值;否则默认返回(或nil,如果没有指定默认值)。

示例 2

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:

(setf (get 'books 'title) '(Gone with the Wind))
(setf (get 'books 'author) '(Margaret Micheal))
(setf (get 'books 'publisher) '(Warner Books))
(write (get 'books 'title))
(terpri)
(write (get 'books 'author))
(terpri)
(write (get 'books 'publisher))

当执行代码,它返回以下结果:

(GONE WITH THE WIND)
(MARGARET MICHEAL)
(WARNER BOOKS)

symbol-plist函数可以看到一个符号的所有属性。

示例 3

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:

(setf (get 'annie 'age) 43)
(setf (get 'annie 'job) 'accountant)
(setf (get 'annie 'sex) 'female)
(setf (get 'annie 'children) 3)
(terpri)
(write (symbol-plist 'annie))

当执行代码,它返回以下结果:

(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43)

remprop函数从符号中删除指定的属性。

示例 4

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:

(setf (get 'annie 'age) 43)
(setf (get 'annie 'job) 'accountant)
(setf (get 'annie 'sex) 'female)
(setf (get 'annie 'children) 3)
(terpri)
(write (symbol-plist 'annie))
(remprop 'annie 'age)
(terpri)
(write (symbol-plist 'annie))

当执行代码,它返回以下结果:

(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43)
(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT)