f
関数を x に 2 回適用するこの関数を作成しようとしています。
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
私はどこか間違っていますか?