由于每个序列将按升序排列,因此您可以编写一个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
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过将其他序列合并在一起来定义最终序列:
squares = map (^2) [1..]
cubes = map (^3) [1..]
factorials = scanl1 (*) [1..]
foo = squares `merge` cubes `merge` factorials
Run Code Online (Sandbox Code Playgroud)
> take 20 foo
[1,2,4,6,8,9,16,24,25,27,36,49,64,81,100,120,121,125,144,169]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
265 次 |
| 最近记录: |