我在我的课程中遇到了一个练习题,导致我对 [2, 2 .. 2] 的输出产生困惑。为什么输入 [2, 2 .. 2] 会生成一个由 2 组成的“无限”列表?
我的理解是,这个符号表示的意思是第一个元素是起始边界,第二个元素是数字之间的“间隔”,最后一个元素是列表的结束,也就是当达到这个数字时停止。
如果我的推理是正确的,那么为什么表达式 [2, 2 .. 2] 不输出 [2] 呢?
我认为 Haskell 可能会这样计算:
- 当打印列表的第一个元素时,它等于最后一个元素,因此停止。
- 或者,如果第一个元素没有与“外部”边界进行比较,那么输出将为 [2, 2],因为当将前一个数字(在我们的例子中是起始边界 2)加零时,我们已经到达了结束点,因此停止。
显然我错误地理解了符号的工作原理,那么 Haskell 是如何计算这个表达式的呢?
range
可以意味着任何东西。我将标签更改为range-notation
并添加了一个标签维基。 - Robert Harvey