如何编写接收列表的函数,例如[7, 8, 9]
。
该函数在无限列表内。它将从无限列表中计算所有除数。
例如take 5 (f [7, 8, 9])
的输出将为[7, 8, 9, 14, 16]
第二个示例take 7 (f [7, 8, 9])
的输出为[7, 8, 9, 14, 16, 18, 21]
希望您能理解我的意思。
我的代码如下:
myFunction list = [x | x <- [1..], el <-[list], x `mod` el == 0]
我的代码仅适用于常量列表。如果我写
myFunction list = [x | x <- [1..], el <-[7, 8], x `mod` el == 0]
它仅适用于7和8
如何传递任意列表?
答案 0 :(得分:4)
首先让我们解决单个项目而不是列表的情况:
multiples n | n > 0 = [n * i | i <- [1..]]
那很容易。现在假设我们有multiples 2
和multiples 3
,如何计算multiples [2,3]
,即由2或3的倍数组成的递增数字序列,或者换句话说,由是在数字multiples 2
或multiples 3
中递增的数字?试试这个:
merge (x:xs) (y:ys) = case compare x y of
GT -> y : merge (x:xs) ys
LT -> x : merge xs (y:ys)
EQ -> x : merge xs ys
现在我们可以实现所需的功能:
f (x:xs) = foldr merge (multiples x) (multiples <$> xs)