繁体   English   中英

哈斯克尔。 为什么数组比列表快?

[英]Haskell. Why are arrays faster than lists?

我正在学习Haskell。 我还有一个问题:

列表类型是Haskell中的基本类型。 Haskell中的数组基于列表。 这是索引[Ix a]的列表,表提供的功能-对[(Ix a,Value)]的列表。 如果数组内部使用列表,为什么数组比列表快?

恐怕你错了。

Haskell中有几种数组实现 ,但据我所知,它们都是在连续内存数组之上实现的。 因此,有可能O(1)访问元素以进行读取。

数组和列表之间的相似性仅存在于操作集级别。

数组不是基于列表的,它们的实现与其他编程语言类似,具有连续的存储区域。

创建它们的最常用方法是, 数组函数将一个索引列表,值对作为参数,并且在您打印它们时也将它们显示为此类列表。 这是因为Haskell中的数组不仅可以用整数索引,还可以用任何实现Ix类型类的索引,例如(Int,Int)对,布尔值,Char's和许多其他版本。 因此,[(index,value)]表示实际上是唯一一种与Haskell中的数组一样通用的数组显示方法。

数组不是基于列表的。 列表是常规的递归数据类型:

data [] a = [] | a : [a]

虽然各种数组库(例如uvector,array,vector,carray,hmatrix)使用低级读取和写入操作来提供数组接口。 没有相似之处,只是两个数据结构都可以表示序列,尽管复杂度不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM