Haskell中的长度vs头部vs最后一个
我知道其中有两种说法是正确的,但我不知道哪一种是正确的 设Haskell中的长度vs头部vs最后一个,haskell,functional-programming,declarative,Haskell,Functional Programming,Declarative,我知道其中有两种说法是正确的,但我不知道哪一种是正确的 设e为[Int] 存在e这样的情况:头e的评估不会完成,但最后一个e会 存在e这样的情况:对最后一个e的评估不会完成,但头e将完成 存在e这样的情况:长度e的评估不会完成,但最后一个e将完成 我似乎很清楚2是真的,但我看不出1或3怎么可能是真的 我的想法是,为了计算一个列表的长度,你需要得到最后一个列表,使1和3不可能因为这是一个测试问题,我不会直接回答它,但这里有一些提示;如果你自己解决这个问题会更好 因为我们讨论的是不终止的计算,所以定
e
为[Int]
e
这样的情况:头e
的评估不会完成,但最后一个e
会e
这样的情况:对最后一个e
的评估不会完成,但头e
将完成e
这样的情况:长度e
的评估不会完成,但最后一个e
将完成我的想法是,为了计算一个列表的长度,你需要得到最后一个列表,使1和3不可能因为这是一个测试问题,我不会直接回答它,但这里有一些提示;如果你自己解决这个问题会更好 因为我们讨论的是不终止的计算,所以定义一个这样的计算可能会很有用。但是,如果这让您感到困惑,您可以放心地忽略这一点,只参考不包括这一点的示例
-- `never` never terminates when evaluated, and can be any type.
never :: a
never = never
问题1 考虑列表
[never,1]
,或者@chi建议的列表[last[1..],1]
问题2 考虑列表
[1..]
,或者列表[1,从不]
问题3 考虑
长度的定义
:
length [] = 0
length (_:xs) = 1 + length xs
在什么条件下,
length
不终止?这与last
有什么关系?这是家庭作业吗?假设数字文本的类型为Int
,那么myList=[last[1..],2]
的类型是什么但是我看不见你的眼睛point@pepe22提示:在@chi的myList
:-)上试一下你的三个陈述,先在你的脑子里或纸上写。你的问题真的很模糊。唯一有意义的解读是“选择以下所有满足条件的条件集,e::[Int]
”。你能澄清一下吗?也许你现在可以自己回答迟浩田的评论了?@robertz博士我不同意,因为1)和2)是矛盾的,2)和3)是矛盾的。我看不出你是如何证明自己的?对于chi给出的示例,length[last[1..],1]=2
,至少在GHC v8.4.3中是这样。此外,有人说“我知道其中两个陈述是正确的,但我不知道是哪一个”这是一个很好的答案,并感谢您不仅给出了答案!此外,我认为chi的列表对于初学者来说是一个更好的例子,因为每个人都会理解无限列表的最后一个,但你对never的定义有点“高级”。请考虑编辑它的第一张清单:“AJFarmar,你说得对,我太快了。”但问题应该重新措辞,以消除歧义。正如它所说的,对于表达式e
,其中有两条语句是正确的,它们不可能是正确的。它应该是这样的,对于每个语句,都存在一个语句e
。。。