考虑 Haskell 中的以下 lambda 函数:
(\x g n -> g (x * n))
它有两个参数:一个Num命名x的和一个g接受Num命名n并返回其他内容的函数。lambda 函数返回与以下相同类型的另一个函数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 *))呢?