小编sch*_*rlt的帖子

从Haskell中的列表返回序列的第一次迭代

我有一个序列数组,具有无限的迭代次数(例如[6,6,6,6,6]或[23,24,23,24]或[1、2、3、4、1、2、3、4 ])如何遍历Haskell中的每个此类列表并仅返回第一次迭代?在上述示例中:[6]; [23,24]; [1、2、3、4]

谢谢!

编辑:对不起,我不准确。列表确实是无限的。我的目标是返回给定Integer的等分序列的列表。我有一个函数返回除法器的总和。我从第一个和开始了递归调用,并构造了列表。这样就产生了像[6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ...]的列表。

首先,我想解决这个问题,方法是使用列表的第一部分,直到第二个原始Int。但是,这让我感到震惊:更容易检查elem列表中是否存在总和。如果是,请按原样返回列表。否则,将总和追加并继续。

编辑2:产生(至少在我的定义中)无限列表的代码是以下块:

aliquot :: (Integral a) => a -> [a]
aliquot 0 = []
aliquot 1 = [1]
aliquot n = n : (aliquot $ sum $ divisors n)

divisors :: (Integral a) => a -> [a]
divisors n = filter ((0 ==) . (n `mod`)) [1 .. (n `div` 2)]
Run Code Online (Sandbox Code Playgroud)

math haskell functional-programming

-2
推荐指数
1
解决办法
78
查看次数

标签 统计

functional-programming ×1

haskell ×1

math ×1