LISP - 符号(Symbols)

LISP - 符号(Symbols) 首页 / LISP入门教程 / LISP - 符号(Symbols)

在LISP中,Symbols符号是表示数据对象的名称,有趣的是,它也是数据对象。符号的特殊之处在于它们有一个称为属性列表或plist的组件。

属性列表

LISP允许您为符号指定特性,例如,让我们有一个"person"对象。我们希望这个"person"对象具有诸如名称,性别,身高,体重,地址,职业等属性。

例如,以下语句允许我们将属性Title、Author和Publisher以及各自的值分配给名为(Symbol)‘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)

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

链接:https://www.learnfk.comhttps://www.learnfk.com/lisp/lisp-symbols.html

来源:LearnFk无涯教程网

属性列表 - 示例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)

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

AI技术内参 -〔洪亮劼〕

Android开发高手课 -〔张绍文〕

Linux实战技能100讲 -〔尹会生〕

雷蓓蓓的项目管理实战课 -〔雷蓓蓓〕

摄影入门课 -〔小麥〕

数据中台实战课 -〔郭忆〕

Flink核心技术与实战 -〔张利兵〕

MySQL 必知必会 -〔朱晓峰〕

编程高手必学的内存知识 -〔海纳〕

好记忆不如烂笔头。留下您的足迹吧 :)