【发布时间】:2016-08-17 10:57:40
【问题描述】:
我正在处理haskell book 并且我知道:sprint x 用于打印 x 的元素已被评估并且元素尚未被评估(那些不是由'_'表示的) .
书中提供的例子之一,
Prelude> let blah = enumFromTo 'a' 'z'
Prelude> :sprint blah
blah = _
Prelude> take 1 blah
"a"
Prelude> :sprint blah
blah = 'a' : _
为了测试不同的输入,我在 GHCi 中做了这个:-
prelude> let b = [1,2,3,4,5]
prelude> :sprint b
b = _
prelude> take 1 b
[1]
prelude> :sprint b
b = _
最后一个命令中:sprint b 的输出不应该是b = 1 : _,因为我们在使用命令take 1 b 时只评估单个列表项和一个cons 运算符?但它显示了上面的输出。这是如何以及为什么会发生的?输出不应该类似于String类型的输出吗?
编辑:我一直在尝试更多并得到了这个结果:-
prelude> let b = [1..10] :: [Int]
prelude> :sprint b
b = _
prelude> take 3 b
[1,2,3]
prelude> :sprint b
b = 1 : 2 : 3 : _
好的,我最初的猜测是,这是因为我构建这两个列表的方式?一种是使用范围,另一种是通过显式声明其元素(依次通过使用 cons ':' 构造函数在其元素上递归创建列表)
【问题讨论】:
标签: list haskell evaluation