- LISP 教程
- LISP - 首页
- LISP - 概述
- LISP - 环境
- LISP - 程序结构
- LISP - 基本语法
- LISP - 数据类型
- LISP - 宏
- LISP - 变量
- LISP - 常量
- LISP - 运算符
- LISP - 决策
- LISP - 循环
- LISP - 函数
- LISP - 谓词
- LISP - 数字
- LISP - 字符
- LISP - 数组
- LISP - 字符串
- LISP - 序列
- LISP - 列表
- LISP - 符号
- LISP - 向量
- LISP - 集合
- LISP - 树
- LISP - 哈希表
- LISP - 输入 & 输出
- LISP - 文件 I/O
- LISP - 结构体
- LISP - 包
- LISP - 错误处理
- LISP - CLOS
- LISP 有用资源
- Lisp - 快速指南
- Lisp - 有用资源
- Lisp - 讨论
Lisp - 符号
在 LISP 中,符号是一个表示数据对象的名称,有趣的是它本身也是一个数据对象。
使符号特殊的是它们有一个称为属性列表或plist的组件。
属性列表
LISP 允许您为符号分配属性。例如,让我们有一个“person”对象。我们希望这个“person”对象具有名称、性别、身高、体重、地址、职业等属性。属性就像一个属性名称。
属性列表实现为一个具有偶数(可能为零)个元素的列表。列表中的每一对元素构成一个条目;第一项是指示符,第二项是值。
创建符号时,其属性列表最初为空。属性是通过在setf表单中使用get来创建的。
例如,以下语句允许我们将属性 title、author 和 publisher 以及相应的值分配给名为(符号)'book' 的对象。
示例
创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。
main.lisp
; create object books, assign symbol title a value (write (setf (get 'books'title) '(Gone with the Wind))) ; terminate printing (terpri) ; update object books, assign symbol author a value (write (setf (get 'books 'author) '(Margaret Michel))) ; terminate printing (terpri) ; update object books, assign symbol publisher a value (write (setf (get 'books 'publisher) '(Warner Books)))
输出
执行代码时,它返回以下结果:
(GONE WITH THE WIND) (MARGARET MICHEL) (WARNER BOOKS)
各种属性列表函数允许您分配属性以及检索、替换或删除符号的属性。
get 函数返回给定指示符的符号的属性列表。它具有以下语法:
get symbol indicator &optional default
get 函数查找给定符号的属性列表中指定的指示符,如果找到则返回相应的值;否则返回默认值(如果未指定默认值,则为 nil)。
示例
更新名为 main.lisp 的源代码文件,并在其中键入以下代码。
main.lisp
; create object books, assign symbol title a value (setf (get 'books 'title) '(Gone with the Wind)) ; create object books, assign symbol author a value (setf (get 'books 'author) '(Margaret Micheal)) ; create object books, assign symbol publisher a value (setf (get 'books 'publisher) '(Warner Books)) ; retrieve title from books object (write (get 'books 'title)) ; terminate printing (terpri) ; retrieve author from books object (write (get 'books 'author)) ; terminate printing (terpri) ; retrieve publisher from books object (write (get 'books 'publisher))
输出
执行代码时,它返回以下结果:
(GONE WITH THE WIND) (MARGARET MICHEAL) (WARNER BOOKS)
symbol-plist 函数允许您查看符号的所有属性。
示例
创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。
main.lisp
; create object annie, assign symbols values (setf (get 'annie 'age) 43) (setf (get 'annie 'job) 'accountant) (setf (get 'annie 'sex) 'female) (setf (get 'annie 'children) 3) ; terminate printing (terpri) ; print symbol lists (write (symbol-plist 'annie))
输出
执行代码时,它返回以下结果:
(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43)
remprop 函数从符号中删除指定的属性。
示例
更新名为 main.lisp 的源代码文件,并在其中键入以下代码。
main.lisp
; create object annie, assign symbols values (setf (get 'annie 'age) 43) (setf (get 'annie 'job) 'accountant) (setf (get 'annie 'sex) 'female) (setf (get 'annie 'children) 3) ; terminate printing (terpri) ; print symbol lists (write (symbol-plist 'annie)) ; removing properties age (remprop 'annie 'age) ; terminate printing (terpri) ; print symbol lists (write (symbol-plist 'annie))
输出
执行代码时,它返回以下结果:
(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43) (CHILDREN 3 SEX FEMALE JOB ACCOUNTANT)
广告