我想生成一个从10减1到1的序列。
使用标准库函数的最简单方法是
reverse [1..10]
然而,这是以低效的方式实现的 - 它生成列表然后将其反转。然而,
[10..1]
生成空列表。
我知道[1..10]只是
的语法糖enumFromTo 1 10
是否有标准库“enum *”函数从较高元素到较低元素进行枚举?
答案 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]