我有一个序列数组,具有无限的迭代次数(例如[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)