- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章:特殊数据结构
在之前的章节⾥,我们讨论了列表,Lisp 最多功能的数据结构。本章将演⽰如何使
Lisp 其它的数据结构:数组 (包含向量与字符串),结构以及哈希表。它们或许不像
列表这么灵活,但存取速度更快并使 了更少空间。
Common Lisp 还有另⼀种数据结构:实例 (instance )。实例将在 11 章讨论,讲述
CLOS 。
4 .1 数组 (Array)
4 .2 ⽰例:⼆叉搜索 (Example: Binary Search)
4 .3 字符与字符串 (Strin s and Characters)
4 .4 序列 (Sequences)
4 .5 ⽰例:解析⽇期 (Example: Parsin Dates)
4 .6 结构 (Structures)
4 .7 ⽰例:⼆叉搜索树 (Example: Binary Search Tree)
4 .8 哈希表 (Hash Table)
Chapter 4 总结 (Summary)
Chapter 4 习题 (Exercises)
4.1 数组 (Array)
在 Common Lisp ⾥,你可以调 make-array 来构造⼀个数组,第⼀个实参为⼀个
指定数组维度的列表。要构造⼀个 2 x 3 的数组,我们可以:
(setf arr (make-array (2 3) :initial-element nil))
#Simple-Array T (2 3) BFC FE
Common Lisp 的数组⾄少可以达到七个维度,每个维度⾄少可以容纳 1023 个元素。
:initial-element 实参是选择性的。如果有提供这个实参,整个数组会 这个值
作为初始值。若试著取出未初始化的数组内的元素,其结果为未定义 (undefined )。
aref 取出数组内的元素。与 Common Lisp 的存取函数⼀样, aref 是零索引的
(zero-indexed ):
(aref arr 0 0)
NIL
要替换数组的某个元素,我们使 setf 与 aref :
(setf (aref arr 0 0) b)
B
(aref arr 0 0)
B
要表⽰字⾯常量的数组 (literal array ),使 #na 语法,其中 n 是数组的维度。举例
来说,我们可以这样表⽰ arr 这个数组:
#2a((b nil nil) (nil nil nil))
如果全局变量 *print-array* 为真,则数组会 以下形式来显⽰:
(setf *print-array* t)
T
arr
#2A((B NIL NIL) (NIL NIL NIL))
如果我们只想要⼀维的数组,你可以给 make-array 第⼀个实参传⼀个整数,⽽不
是⼀个列表:
(setf vec (make-array :initial-element nil))
#(NIL NIL NIL NIL)
⼀维数组又称为向量 (vector )。你可以通过调 vector 来⼀步骤构造及填满向
量,向量的元素可以是任何类型:
(vector a b 3)
#(a b 3)
字⾯常量的数组可以表⽰成 #na ,字⾯常量的向量也可以 这种语法表达。
可以 aref 来存取向量,但有⼀个更快的函数叫做 svref ,专门 来存取向量。
(svref vec 0)
NIL
在 svref 内的 “sv” 代表“简单向量” (“simple vector” ),所有的向量缺省是简单向
量。 [1]
4.2 ⽰例:⼆叉搜索 (Example: Binary Search)
作为⼀个⽰例,这⼩节演⽰如何写⼀个在排序好的向量⾥搜索对象的函数。如果我们
知道⼀个向量是排序好的,我们可以⽐ (65页)find 做的更好, find 必须依序检
查每⼀个元素。我们可以直接跳到向量中间开始找。如果中间的元素是我们要找的对
象,搜索完毕。要不然我们持续往左半部或往右半部搜索,取决于对象是⼩于或⼤于
中间的元素。
图 4 .1 包含了⼀个这么⼯作的函数。其实这两个函数: bin-search 设置初始范围及
发送控制信号给 finder , finder 寻找向量 vec内 obj 是否介于 start 及 en
您可能关注的文档
- 第十二篇 (拉普拉斯变换在电路分析中的应用).ppt
- 第十二篇 JDBC数据库连接.ppt
- 第十二篇 投资组合优化1.ppt
- 第十二篇:条形码识别.pdf
- 第十二章 可编程控制器和其应用.ppt
- 第十二章 国民收入分配及消费(新).ppt
- 第十二章分散式模块的OCX及DLL.pdf
- 第十讲 反应器单元仿真设计(一).ppt
- 第十讲__体细胞克隆技术和其价值负荷.ppt
- 第十节 电磁兼容性.ppt
- 2025四川南充市公路管理局南充市水务局遴选3人笔试备考题库附答案解析.docx
- 2025年清水河县事业单位联考招聘考试历年真题完美版.docx
- 2025年正安县事业单位联考招聘考试历年真题完美版.docx
- 2025年金沙县事业单位联考招聘考试真题汇编新版.docx
- 2025年乐业县辅警招聘考试真题汇编及答案1套.docx
- 2025年新龙县事业单位联考招聘考试历年真题附答案.docx
- 2025年淮阳县事业单位联考招聘考试历年真题含答案.docx
- 2025年紫金县事业单位联考招聘考试真题汇编含答案.docx
- 2025年永福县事业单位联考招聘考试历年真题推荐.docx
- 2025年睢县事业单位联考招聘考试历年真题含答案.docx
最近下载
- 2021-2022学年北京四中九年级上学期月考数学试卷(12月份)(含答案解析).docx VIP
- 天津经济技术开发区工业项目开发建设指南.doc VIP
- 软件系统安装调试指南.pdf VIP
- 九年级上学期十二月月考化学试题.doc VIP
- 储罐及输油管道拆除方案.doc VIP
- 【高考真题】2022年全国统一高考山东卷《物理》试题(原卷版).pdf VIP
- 2025年24年河北省中考数学试卷及答案.doc VIP
- 2025年度绍兴市专业技术人员继续教育公需科目考试题库(附答案).docx VIP
- 2025年上海高考数学二轮复习:热点题型05 圆锥曲线(十二大题型)原卷版+解析.pdf VIP
- 浙江省杭州市西湖区学军中学2024-2025学年高二上学期期末考数学(原卷版).docx VIP
原创力文档


文档评论(0)