gpt4 book ai didi

haskell - 通过具有不同参数数量的方程定义函数

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

我今天注意到这样一个定义

safeDivide x 0 = x
safeDivide = (/)

不可能。我只是好奇这背后的(好的)原因是什么。一定有一个非常好的(毕竟是 Haskell :))。

注意:我并不是在寻找上述代码的替代实现的建议,它只是一个简单的示例来证明我的观点。

最佳答案

我认为这主要是为了保持一致性,以便所有条款都可以以相同的方式阅读;即每个 RHS 都位于函数类型中的相同位置。我认为如果您也允许这样做,将会掩盖相当多的愚蠢错误。

还有一个轻微的语义怪癖:假设编译器填充了此类子句,使其具有与其他子句相同数量的模式;即你的例子将变成

safeDivide x 0 = x
safeDivide x y = (/) x y

现在考虑第二行是否改为 safeDivide = undefined;如果没有上一个子句,safeDivide 将是 ,但由于此处执行的 eta 扩展,它是 \x y -> if y == 0 then x else ⊥ — 因此 safeDivide = undefined 实际上并未定义 safeDivide!在我看来,这似乎令人困惑,足以证明禁止此类条款是合理的。

关于haskell - 通过具有不同参数数量的方程定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29061307/

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