考虑 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 *))
呢?