Haskell,倒序范围(无步长)

6
为什么在Haskell中不使用步长的情况下无法使用downto范围?
[7..1] => []

但是仅仅只能这样工作。
[7,6..1] => [7,6,5,4,3,2,1] 
3个回答

13

Haskell无法知道你想要向负方向移动1步,除非你给出提示。

当你希望有一个范围 [x..y],其中y < x并且你期望范围为空的情况下,Haskell可能会存在问题。 如果在这些情况下Haskell简单地向下走,则会产生微妙的错误。


8

3.10. 等差数列

[...] 等差数列满足以下等式:

  • [...]
  • [ e1..e3 ] = enumFromTo e1 e3
  • [...]

6.3.4 枚举类

对于 Int 和 Integer 类型,枚举函数有以下含义:

  • [...]
  • 序列 enumFromTo e1 e3 是列表 [e1,e1 + 1,e1 + 2,…e3]。如果 e1 > e3,则该列表为空。
  • [...]

来自Haskell 2010语言报告


2

如果没有指定步长,Haskell会假定为+1,如果不适用于给定的参数,则返回空列表。

除了+1之外的任何增量都必须明确建议;不仅是正整数> 1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接