我关注教程。 (现实世界哈斯克尔)

而且我有一个关于头和尾巴的初学者问题,请在空名单上被打电话:在GHCI中,它返回异常。

直觉上,我想我会说他们俩都应该返回一个空名单。你能纠正我吗?为什么不 ? (据我所记得的,在OZML左或右侧的空列表返回零)

我肯定尚未在教程中介绍此主题,但这不是错误的来源(如果没有提供争论)?我的意思是,如果传递到一个可能是选项的参数列表,则用头部阅读它们可能会导致错误?

我只知道GHCI的行为,我不知道编译时会发生什么。

有帮助吗?

解决方案

我想直观地说,他们俩都应该返回一个空名单。你能纠正我吗?为什么不 ?

好 - head[a] -> a. 。它返回单个元素;没有列表。

当没有像空列表中的第一个元素时?那么要返回什么呢?您无法创建类型的值 a 一无所有,所以剩下的就是 undefined - 一个错误。


tail?尾巴基本上是没有其第一个元素的列表 - 即比原始项目短。当没有第一个元素时,您将无法维护这些法律。

当您将一个苹果从一个盒子中取出时,您将无法拥有相同的盒子(当 tail [] == [])。行为必须是 undefined 也。


这导致了以下结论:

我肯定还没有在教程中介绍此主题,但这不是错误的来源吗?我的意思是,如果传递到一个可能是选项的参数列表,则用头部阅读它们可能会导致错误?

是的,它是错误的来源,但是因为它允许编写缺陷的代码。基本上试图读取不存在的值的代码。因此:*永远不要使用头部/尾巴** - 使用图案匹配。

sum     [] = 0
sum (x:xs) = x + sum xs

编译器可以 保证 涵盖了所有可能的情况,始终定义值,并且阅读更加干净。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top