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)

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

技术教程推荐

深入浅出区块链 -〔陈浩〕

技术领导力实战笔记 -〔TGO鲲鹏会〕

从0开始学微服务 -〔胡忠想〕

10x程序员工作法 -〔郑晔〕

Elasticsearch核心技术与实战 -〔阮一鸣〕

Spring编程常见错误50例 -〔傅健〕

手把手带你写一门编程语言 -〔宫文学〕

深入浅出可观测性 -〔翁一磊〕

Rust 语言从入门到实战 -〔唐刚〕

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