Haskell の次のラムダ関数を考えてみましょう。
(\x g n -> g (x * n))
Num名前付きと、名前付きを受け取って別のものを返すx関数の 2 つのパラメーターgを取ります。ラムダ関数は と同じ型の別の関数を返します:Numng
(\x g n -> g (x * n)) :: Num a => a -> (a -> t) -> a -> t
私が理解していないのは、式g (x * n)が実際に何を表しているのかということです。たとえば、次の使用例を考えてみましょう。
((\x g n -> g (x * n)) 2 id)
この場合xは2とgですid。しかし、何nですか?とはどういう意味g (x * n)ですか? 単純な置換により、 に減らすことができますid (2 * n)。これは と同じid . (2 *)ですか? もしそうなら、なぜ単に書いてみません(\x g -> g . (x *))か?