是否存在Data.List的cycle的矢量替代?
Data.Vector文档有一个标题为Recycling support的部分听起来像我想要的但功能new
和clone
显然不会执行cycle
确实。
我正在考虑的解决方案只是重复索引向量(计数器mod为向量的长度)。
我需要做的一个例子是,我需要一个随机洗牌网格的无限列表,但网格很大,所以将数百万的内容保存在内存中并不理想。我意识到如果随机循环相对较小并不重要,所以我生成了一个只有几百个网格的列表,然后使用Data.List.cycle
来给出无限长度的幻觉。我现在已将list
网格转换为Vector
网格,无法再使用cycle
。
答案 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。基本上我们的想法是,根据我们是否使用给予我们的归纳假设,我们可能会或可能不会决定展开周期。