生成具有正方形,立方体和自然数的阶乘的序列

ove*_*ter 0 haskell

元素必须是唯一的,我如何使用Haskell

我尝试使用迭代元组并且它可以工作,但我如何检查这个数字是否顺序(通过所有序列迭代不是最佳决定:).

ham*_*mar 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
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)