gpt4 book ai didi

haskell - Haskell 高阶函数中 `subtract` 的行为

转载 作者:行者123 更新时间:2023-12-03 10:09:11 27 4
gpt4 key购买 nike

我正在尝试编写这个应用函数 f 的函数在 x 上两次

Prelude> applyTwice :: (a -> a) -> a -> a
Prelude> let applyTwice f x = f (f x)

现在,当我尝试评估以下表达式时
Prelude> applyTwice (`subtract` 3) 10
Output: 10

Prelude> applyTwice (3 `subtract`) 10
Output: 4

据我了解, subtract是一个中缀函数,所以给定的参数应该填充空位置(左操作数或右操作数),因此第一个表达式 applyTwice (`subtract` 3) 10应该表现得像
10 `subtract` 3 `subtract` 3

所以,这种情况下的结果应该是 4 ,但输出是 10
而在另一种情况下,即 applyTwice (3 `subtract`) 10 ,输出为 4 ,我期望它是 10
我是不是哪里出错了?

最佳答案

您对applyTwice的理解和运算符部分符号是正确的。但是,您可能对 subtract 感到困惑做。见 the library documentation其中说:

the same as flip (-)



所以 subtract就像 (-)但随着争论的发生。所以,
  applyTwice (`subtract` 3) 10
=
(`subtract` 3) ((`subtract` 3) 10)
=
(`subtract` 3) (10 `subtract` 3)
=
((10 `subtract` 3) `subtract` 3)
=
(3 - 10) `subtract` 3
=
(-7) `subtract` 3
=
3 - (-7)
=
10

其他表达式也类似。

关于haskell - Haskell 高阶函数中 `subtract` 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16012255/

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