Haskell循环矢量

时间:2015-08-05 21:17:33

标签: haskell vector

是否存在Data.List的cycle的矢量替代?

Data.Vector文档有一个标题为Recycling support的部分听起来像我想要的但功能newclone显然不会执行cycle确实。

我正在考虑的解决方案只是重复索引向量(计数器mod为向量的长度)。

我需要做的一个例子是,我需要一个随机洗牌网格的无限列表,但网格很大,所以将数百万的内容保存在内存中并不理想。我意识到如果随机循环相对较小并不重要,所以我生成了一个只有几百个网格的列表,然后使用Data.List.cycle来给出无限长度的幻觉。我现在已将list网格转换为Vector网格,无法再使用cycle

2 个答案:

答案 0 :(得分:9)

没有。 Vector包中现有的Vector至少分配了脊椎,因此没有无限内存就不能拥有Vector.cycle

例如,Data.Vector使用Data.Primitive.Array

由于向量包的内部(例如Data.Vector.Generic.*)允许您以灵活的方式定义其他类型的向量,您可以创建一个向量类型,以计算索引的模数来提供循环行为(和包括与drop一起使用的偏移量。所以建筑是可以想象的,只是没有完成。

答案 1 :(得分:2)

如果你想要一个循环列表的有限表示(不是向量,所以你仍然有一个与周期大小成线性的访问时间),你可能想看一下this module我是和去年一起比赛。

顺便说一句,the type of fold非常奇怪的原因是explained here。基本上我们的想法是,根据我们是否使用给予我们的归纳假设,我们可能会或可能不会决定展开周期。