我知道其中两个陈述是正确的,但我不知道哪个
让e
是类型[Int]
的表达式
存在e
,这样:对head e
的评估不会完成,但是last e
的评估会
存在e
使得:last e
的评估不会完成,但是head e
会
存在e
,这样:对length e
的评估不会完成,但是last e
的评估会
我似乎清楚2是正确的,但我看不到1或3怎么可能是正确的。
我的想法是,要计算列表的长度,您需要到达最后一个列表,从而使1和3变得不可能
答案 0 :(得分:3)
由于这是一个测试问题,因此我不会直接回答,而是一些提示;最好自己动手做。
由于我们正在谈论不会终止的计算,因此定义一个这样的计算可能会很有用。但是,如果这使您感到困惑,则可以放心地忽略它,而仅引用不包含此内容的示例。
-- `never` never terminates when evaluated, and can be any type.
never :: a
never = never
考虑列表[never, 1]
或@chi建议的列表[last [1..], 1]
。
考虑列表[1..]
,或者列表[1, never]
。
考虑length
的定义:
length [] = 0
length (_:xs) = 1 + length xs
在length
下什么情况下不终止?这与last
有什么关系?