【发布时间】:2013-12-15 22:23:40
【问题描述】:
我正在学习教程。 (真实世界的 Haskell)
我有一个关于空列表调用头尾的初学者问题:在 GHCi 中它返回异常。
直觉上我想我会说他们都应该返回一个空列表。你能纠正我吗?为什么不 ? (据我记得在 OzML 中,空列表的左侧或右侧返回 nil)
我当然还没有在教程中讨论这个主题,但它不是错误的来源(如果不提供参数)? 我的意思是,如果曾经向函数传递一个可能是可选的参数列表,那么用 head 读取它们可能会导致错误?
我只知道 GHCi 的行为,我不知道编译时会发生什么。
【问题讨论】:
-
这实际上是“偏函数”更普遍问题的一个特例。 “总计”函数将返回任何参数的结果。部分函数不是全部的;一些参数将返回底部(即错误或无限循环)。总语言(所有功能都是总的)的工作正在进行中,但不要屏住呼吸。
-
我不明白“正在进行,但不要屏住呼吸”?根据我现在所了解的情况,我更喜欢整体功能而不是部分功能。
-
@Stephane Rolland:不要等待这种语言成为现实;)在大多数情况下,
Maybe a类型是表达可能返回的计算的最佳选择值。` -
@Dario 也许我还没有理解好......你的意思是返回或不返回某些东西的可能性......所以可能会返回两种类型(东西或无效)......我想知道关于那个。
-
@Stephane Rolland:有些计算不会总是成功。返回
undefined不是一个好的选择,因为类型系统不涵盖失败选项,并且无法检查结果的有效性(您不能与undefined进行模式匹配)。每当有一个计算可以返回一个值或失败时,应该采用Maybe a。例如。parseNumber :: String -> Int是一个糟糕的选择,因为它没有涵盖解析失败的可能性。parseNumber :: String -> Maybe Int清楚地说明了这一点,没有最终得到未定义值的危险。
标签: ghci haskell-platform haskell