gpt4 book ai didi

haskell - 反向范围实现

转载 作者:行者123 更新时间:2023-12-03 15:12:46 24 4
gpt4 key购买 nike

为了记录,我是一个 Haskell 菜鸟。我试图理解为什么可以将范围声明为

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

并不是
[10..1] -- yields []

像这样实现它似乎很简单:
(.:.) :: Enum a => a -> a -> [a]
(.:.) a b =
| a == b = []
| a > b = a : (a - 1) .:. b
| a < b = a : (a + 1) .:. b

我在这里不明白什么?

最佳答案

试试 [10,9..1]而不是 [10..1][10..1]脱糖至 enumFromTo
[10,9..1]脱糖至 enumFromThenTo

观察函数在 GHCI 中的行为:

Prelude> [10..1]
[]
Prelude> [10,9..1]
[10,9,8,7,6,5,4,3,2,1]
Prelude> :t enumFromTo
enumFromTo :: Enum a => a -> a -> [a]
Prelude> :t enumFromThenTo
enumFromThenTo :: Enum a => a -> a -> a -> [a]
Prelude> enumFromTo 10 1
[]
Prelude> :t enumFromThenTo 10 9 1
[10,9,8,7,6,5,4,3,2,1]

您在 (.:.) 中实现的新行为很少会成为理想的默认值,因为以这种方式生成的列表不能再 总是 假定为升序。因此,有必要使用 [x,(pred x)..y] 明确说明您的降序意图。或 enumFromThenTo .

关于haskell - 反向范围实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31753677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com