gpt4 book ai didi

Haskell 语义未定义值

转载 作者:行者123 更新时间:2023-12-01 11:51:59 26 4
gpt4 key购买 nike

我是 Haskell 及其语义的新手。我了解到并非每个函数都可以映射到一个对象。例如:

square :: Int -> Int 
square x = x*x

square 的值映射到数学对象。然而,对于任何非终止函数,我们将其映射到一个特殊的数学值 。我想知道如果我必须用这个未定义的值进行计算会发生什么。例如,我有一组数字 Z⊥ ={⊥, 1,0,-1}。如果我将 乘以 1,输出结果是什么?因为 的类型是未定义的,我能用定义明确的类型做乘法吗?由于 Z⊥ 的域中,我想我可以做乘法。但是,它必须返回 !我想就此获得一些指导!

最佳答案

乘法也将返回。它的行为与您描述的完全一样;任何依赖于 值的计算也将产生

2 * undefined ~= undefined

底层值是每个类型的居民,因此是每个值集的隐式成员,不能被类型排除(除非使用 GHC 内部原语)。之所以存在这个特殊值,是为了让争论Haskell中的Halting Problem成为可能;如果没有此值,编译器将必须能够证明某个计算已终止,以便对其进行类型检查,而这通常是不可能的。

关于Haskell 语义未定义值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10693601/

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