我只是盯着 Haskell 阅读http://learnyouahaskell.com的书。在 Texas Ranges 部分中,作者展示了使用语法 [x,y..z] 指定范围中的步骤的代码,我在示例 [2,4..20] 中做到了这一点,并且运行顺利,但是当我运行 [2,2..20] 我得到一个无限的 2 列表,而不是 [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, 17,18,19,20]。如果我运行 [2,3..20] 我会得到所需的输出,所以我假设列表的第一个值为 2 存在某种问题,我想要一个更技术性的答复来解释为什么会这样不允许。控制台图片
Wil*_*sem 12
\n\n但是当我跑步时,我得到了一个无限的s
\n[2,2..20]列表2
这是预期的行为。事实上,对于 range ,第一个数字确定起始值,和之间的差值确定步长,并确定上限。由于步长为,它将继续产生s,并且永远不会产生大于上限 的值。[x, y .. z]xyxz0220
如果你写,这会被翻译成Haskell报告 \xc2\xa76.3.4 所说的:[e1, e2 .. e3]enumFromThenTo e1 e2 e3
\n\n该序列是列表 [ e 1 , e 1 + i , e 1 +2 i ,\xe2\x80\xa6 e 3 ],其中增量i是e 2 - e 1。如果增量为正或零,则当下一个元素大于e 3时列表终止;如果e 1 > e 3,则列表为空。如果增量为负,则当下一个元素小于e 3时列表终止;如果e 1 < e 3,则列表为空。
\nenumFromThenTo e1 e2 e3
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |