元素必须是唯一的,我如何使用Haskell
我尝试使用迭代和元组并且它可以工作,但我如何检查这个数字是否顺序(通过所有序列迭代不是最佳决策:)。
答案 0 :(得分:8)
由于每个序列都是按升序排列,因此您可以编写merge
函数来合并升序列表(或使用ordlist
包中的列表)。
merge [] ys = ys
merge xs [] = xs
merge (x:xs) (y:ys) =
case compare x y of
LT -> x : merge xs (y:ys)
EQ -> x : merge xs ys
GT -> y : merge (x:xs) ys
然后,您可以通过将其他序列合并在一起来定义最终序列:
squares = map (^2) [1..]
cubes = map (^3) [1..]
factorials = scanl1 (*) [1..]
foo = squares `merge` cubes `merge` factorials
> take 20 foo
[1,2,4,6,8,9,16,24,25,27,36,49,64,81,100,120,121,125,144,169]
答案 1 :(得分:3)
squares = map (^2) [1..]
cubes = map (^3) [1..]
factorials = scanl1 (*) [1..]
merge (x:xs) (y:ys) | x == y = x : merge xs ys
| x < y = x : merge xs (y:ys)
| otherwise = y : merge (x:xs) ys
take 20 $ factorials `merge` squares `merge` cubes
--[1,2,4,6,8,9,16,24,25,27,36,49,64,81,100,120,121,125,144,169]