Haskell の次のラムダ関数を考えてみましょう。
(\x g n -> g (x * n))
Num
名前付きと、名前付きを受け取って別のものを返すx
関数の 2 つのパラメーターg
を取ります。ラムダ関数は と同じ型の別の関数を返します:Num
n
g
(\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 *))
か?