清单
列表的特征
列表的力量来自他们的定义头和尾巴:
这头是列表中的第一个项目;这尾巴是所有剩余的物品。这尾巴本身就是一个列表,拥有自己的名单头和尾巴:
这可以为每个人重复尾巴:
利用此属性允许使用具有最小代码的递归在列表中定义的操作。
最小的必需功能
功能名称* 提供功能 新的
创建一个空列表。 附加
将项目添加到列表的末尾。 prep
将项目添加到列表的开头。 头
返回列表开头的项目。 尾巴
返回所有项目除了这头。如果列表仅有1项,则返回空列表。 是空的
返回BOOL,指示列表是否包含任何项目。 *不需要确切的名称。实际上,可以通过特殊语法直接由给定的语言提供一些功能。
使用链接列表示例Python实现
请注意,Python具有它调用的内置类型列表
。它没有特别定义要用作列表ADT(抽象数据类型)的所需API,但它确实提供了阵列切片的内置语法。自从以来尾巴
列表ADT的功能可以被视为切片的特定情况,可以使参数成为Python列表
确实以环形交叉路口方式履行列表ADT API的要求。
此示例以面向对象的样式实现链接列表,并包括列表ADT的最小功能。这列表
类只有对头节点的引用,所以附加操作必须走过所有节点来查找上一个节点,使其成为一个
手术。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 21 22 32 32 32 29 32 32 32 32 32 32 32 37 37 37 37 32 40 43 44 44 44 44 49 49 49 49 49 49 49 5051 52 53 54 |
|
试用附加
和prep
:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 |
|
现在尝试头
和尾巴
:
1 2 |
|
1 2 |
|
示例:在列表中求和所有值
使用python实现以上:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 17 18defsum_list.(列表):如果不是列表。是空的():返回列表。头()+sum_list.(列表。尾巴())别的:返回0.某种遗嘱=列表()某种遗嘱。prep(3.的)某种遗嘱。prep(3.的)某种遗嘱。prep(4.的)某种遗嘱。prep(1的)某种遗嘱。prep(7.的)某种遗嘱。prep(7.的)某种遗嘱。prep(1的)某种遗嘱。prep(4.的)某种遗嘱。prep(5.的)某种遗嘱。prep(7.的)打印(sum_list.(某种遗嘱))
142.
使用Haskell内置列表:
1 2 3 4 5汉语::(数一种的)=>[一种]- >一种汉语[]=0.汉语X=头X+汉语(尾巴X的)主要的=打印(汉语[7.那5.那4.那1那7.那7.那1那4.那3.那3.])
142.
示例:实施右折叠
在前面的示例上概括,右折叠采用任意函数,并且累积地将其应用于整个列表。
使用python实现以上:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 21 22 23 24 22defspecial_add.(X那y):返回X+2*y#具体来说,这是一个正确的折叠deffold_list.(功能那列表):如果列表。尾巴()。是空的():返回列表。头()别的:返回功能(列表。头(),fold_list.(功能那列表。尾巴()))某种遗嘱=列表()某种遗嘱。prep(3.的)某种遗嘱。prep(3.的)某种遗嘱。prep(4.的)某种遗嘱。prep(1的)某种遗嘱。prep(7.的)某种遗嘱。prep(7.的)某种遗嘱。prep(1的)某种遗嘱。prep(4.的)某种遗嘱。prep(5.的)某种遗嘱。prep(7.的)打印(fold_list.(special_add.那某种遗嘱))
13257.
使用Haskell内置列表:
1 2 3 4 5 6 7 8 9专职者::(数一种的)=>一种- >一种- >一种专职者Xy=X+2*y- 具体来说,这是一个正确的折叠折叠单::(一种- >一种- >一种的)- >[一种]- >一种折叠单F[X]=X折叠单FL.=F(头L.的)(折叠单F(尾巴L.))主要的=打印(折叠单专职者[7.那5.那4.那1那7.那7.那1那4.那3.那3.])
13257.
自己尝试:实现地图
引用如下:列表。bright.org.。检索到从https://billiant.org/wiki/lists/