List 简单的是/否haskell列表问题

List 简单的是/否haskell列表问题,list,haskell,List,Haskell,因此,我正在阅读解释列表的内容,并在Vista 64上使用ghci。它说,[2,4..20]从4到20逐步增加2。这很有效。它说[20,19..1]从20到1,但没有解释。我认为第一个数字不是阶梯,阶梯是第一个数字和第二个数字之间的差异。这由挂起的[4,4..20]确认(没有错误消息,必须终止控制台)。这与运算符类似!!和获取,检查索引的范围并给出错误消息 我的问题是:这是Vista端口上的一个bug,还是应该是这样的?[x,y...z]确实是一步一步地从x到zy-x。当y-x为0时,这将导致无

因此,我正在阅读解释列表的内容,并在Vista 64上使用ghci。它说,[2,4..20]从4到20逐步增加2。这很有效。它说[20,19..1]从20到1,但没有解释。我认为第一个数字不是阶梯,阶梯是第一个数字和第二个数字之间的差异。这由挂起的[4,4..20]确认(没有错误消息,必须终止控制台)。这与运算符类似!!和
获取
,检查索引的范围并给出错误消息


我的问题是:这是Vista端口上的一个bug,还是应该是这样的?

[x,y...z]
确实是一步一步地从x到z
y-x
。当
y-x
为0时,这将导致无限列表。这是故意的行为

请注意,如果在表达式中使用列表,如
take 20[2,2..20]
,ghci将不会尝试打印整个列表(当然,无限列表是不可能的),它也不会“挂起”。

引用:

[n,p..m]是以p-n的步长从n到m的数字列表


您的列表[4,4..20]“挂起”,因为您的步骤为4-4=0,因此它是一个只包含数字4([4,4,4,4…])的无限列表。

该语法基本上是从列出整个列表中派生出来的<例如,代码>[1,3,5,7,9,11,13,15,17,19]可以通过省略明显的部分来缩短。所以你可以说,如果我指定前两个元素,很清楚它将如何继续。因此,上面的列表等于Haskell允许无限列表,而Haskell是“惰性评估语言”,这意味着它只计算得到结果所需的内容,因此Haskell允许无限结构

在Haskell中,您可以计算类似“head[1..]”的内容。这是因为Haskell只计算结果所需的内容。因此,在上面的示例中,它将只生成无限列表的第一个元素(数字1),head将返回这个元素(数字1)。
所以,在这种情况下,程序将终止!但是,如果您计算[1..(无限列表),程序将不会终止。同样适用于您的示例,您创建了一个无限列表,无法终止它。

值得注意的是,列表中的
语法将从Enum typeclass给定的函数中删除enumFrom: