enumFromTo反过来

时间:2015-11-29 12:03:49

标签: haskell

我想生成一个从10减1到1的序列。

使用标准库函数的最简单方法是

reverse [1..10]

然而,这是以低效的方式实现的 - 它生成列表然后将其反转。然而,

[10..1]

生成空列表。

我知道[1..10]只是

的语法糖
enumFromTo 1 10

是否有标准库“enum *”函数从较高元素到较低元素进行枚举?

2 个答案:

答案 0 :(得分:3)

到目前为止,我找到的最佳方式是:

[10,9..1]

调用enumFromThenTo函数:

enumFromThenTo 10 9 1
 -> [10,9,8,7,6,5,4,3,2,1]
[10,9..1]
 -> [10,9,8,7,6,5,4,3,2,1]

但是标准前奏中是否有一个包装器可以做到这一点?

答案 1 :(得分:1)

您也可以编写自己的函数:

reverseEnum :: Int -> Int -> [Int]
reverseEnum a b
    | a == b = [a]
    | a >= b = a : reverseEnum (a-1) b
    | a <= b = []

以下是使用示例:

reverseEnum 10 1
-> [10,9,8,7,6,5,4,3,2,1]