gpt4 book ai didi

haskell - 为什么Haskell 在部分函数中使用bottom 而不是null?

转载 作者:行者123 更新时间:2023-12-02 21:32:47 25 4
gpt4 key购买 nike

我正在阅读有关 Haskell 指称语义( http://en.wikibooks.org/wiki/Haskell/Denotational_semantics )的内容,但我不明白为什么在类型中,底部“值”与“正常”值相比被放置在另一个级别,例如为什么它不能模式匹配。

我相信模式修补底部会引起麻烦,因为底部也表示非终止计算,但为什么非终止计算和错误应该被同等对待? (我假设使用不支持的参数调用部分函数可以被视为错误)。

如果所有 Haskell 类型都包含模式可匹配的 Java-null 类值而不是底部值,那么哪些有用的属性将会丢失?

换句话说:为什么通过提升所有带有 null 值的类型来使所有 Haskell 函数变得完整是明智的做法?

(非终止计算是否需要特殊类型?)

最佳答案

如果不限制语言的图灵完整性,就无法摆脱非终止,并且由于停止问题,我们通常无法检测非终止并将其替换为值。

因此每种图灵完整语言都有底部。

Haskell 和 Java 之间的唯一区别是 Java 的底层为 null。 Haskell 没有后者,这很方便,因为这样我们就不必检查空值!

换句话说,既然底部是不可避免的(在图灵完备的世界中),那么除了引发错误之外,让所有东西都可以为空还有什么意义呢?

另请注意,虽然 Prelude 中的某些函数由于历史原因而存在部分偏差,但现代 Haskell 风格倾向于在几乎所有地方编写总函数,并在诸如 head 之类的函数中使用显式的 Maybe 返回类型否则这将是不完整的。

关于haskell - 为什么Haskell 在部分函数中使用bottom 而不是null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14676737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com