Haskell对lambda函数的解释

时间:2016-02-21 13:47:53

标签: function haskell lambda notation

我有一个Haskell功能,我不明白但想要。

 i :: Int
 i = ((\g x -> g x + g x) (\y -> y)) 3

我知道lambda函数是什么:无名函数。 例如。 (\x -> x) 3取3并返回,(\x y -> x+y) 3 4取3,返回7。 但在这种特殊情况下,我无法解释它。我希望你能帮助我。 顺便说一句。这个功能的解决方案是6。

2 个答案:

答案 0 :(得分:6)

现在,您的(\y -> y)功能相当于id。让我们使用它来重写你的功能:

i = ((\g x -> g x + g x) id) 3

现在将id功能应用于(\g x -> g x + g x)。这将减少到:

i = (\x -> id x + id x) 3

现在很简单:

i = id 3 + id 3
i = 6

答案 1 :(得分:3)

(\g x -> g x + g x)获取必须是函数的参数gx,它必须是该函数的有效参数,然后添加应用{{1}的结果将g发送给自己。

在这种情况下,x作为\y -> yg的值提供为3的值,因此我们得到x(\y -> y) 3 + (\y -> y) 3(y -> y) 3,因此我们得到3,即3 + 3