我正在尝试编写此函数,该函数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
我在某个地方出错了吗?