gpt4 book ai didi

haskell - 具有严格参数的函数

转载 作者:行者123 更新时间:2023-12-03 17:50:17 24 4
gpt4 key购买 nike

我教科书中的一个更正的测验是问我f 中有多少个?的参数是严格的,f存在:

f x 0 z = x == z
f x y z = x
我最初的想法是所有 f的参数被认为是严格的,因为 y正在评估它是否等于 0 , 和 xz进行比较以查看它们是否相等。
然而答案是只有 xy是严格的。
关于为什么的任何线索?

最佳答案

首先,您需要对“严格”有一个非常精确的定义,这样才有意义。一个函数f严格当且仅当评估 f x到 whnf 导致 x被评估为 whnf。这与柯里化(Currying)的交互有点尴尬,我将忽略一些潜在的怪异现象。
假设这里的类型是f :: Bool -> Int -> Bool -> Bool您对 y 的行为的分析是正确的 - 评估 f x y z到 whnf 总是需要评估 y来决定选择哪个方程。由于这是决定使用哪个方程的唯一因素,我们必须将分析拆分为 x。和 z .在第一个等式中,将结果评估为 whnf 会导致 xz被评估。在第二个等式中,将结果评估为 whnf 导致评估 x到whnf。
由于x在两个分支中进行评估,此函数在 x 中是严格的.这有点有趣 - 方式很严格id是严格的。但这仍然有效! z ,但是,是另一回事。只有一个分支导致z被评估,所以它没有被严格评估——它只是按需评估。通常我们谈论这种情况发生在评估被保护在构造函数之后或者当应用函数并且结果不被评估时,但是有条件地评估就足够了。 f True 1 undefined计算结果为 True .如果 fz 中很严格, 这将不得不评估为 undefined .

关于haskell - 具有严格参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66146881/

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