LISP - 符号


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

符号的特殊之处在于它们有一个称为属性列表plist 的组件。

房产清单

LISP 允许您为符号分配属性。例如,让我们有一个“人”对象。我们希望这个“人”对象具有姓名、性别、身高、体重、地址、职业等属性。属性就像属性名称。

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

创建符号时,其属性列表最初为空。属性是通过在setf表单中使用get创建的。

例如,以下语句允许我们将属性标题、作者和出版商以及各自的值分配给名为(符号)“book”的对象。

实施例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)