我有一个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。
答案 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)
获取必须是函数的参数g
和x
,它必须是该函数的有效参数,然后添加应用{{1}的结果将g
发送给自己。
在这种情况下,x
作为\y -> y
和g
的值提供为3
的值,因此我们得到x
。 (\y -> y) 3 + (\y -> y) 3
为(y -> y) 3
,因此我们得到3
,即3 + 3
。