Gal*_*oui 1 syntax lambda haskell
我是Haskell的新手,我不明白这段代码的工作原理.任何人都可以向我解释一下内部绑定在这个例子中是如何工作的:
f = (\x -> ((\x -> x*x) 3)+x)
Run Code Online (Sandbox Code Playgroud)
当我尝试 f 1我得到10
您的代码非常模糊,所以让我们清理它.我们一开始
f = (\x -> ((\x -> x*x) 3)+x)
Run Code Online (Sandbox Code Playgroud)
并注意到有两个变量都被调用x- 多么令人困惑!所以让我们把它写成
f = (\x -> ((\y -> y*y) 3)+x)
Run Code Online (Sandbox Code Playgroud)
接下来,有这个内部lambda表达式.我们可以为它命名并将其绑定在绑定的相同级别f:
square = (\y -> y*y)
f = (\x -> (square 3)+x)
Run Code Online (Sandbox Code Playgroud)
此时,我想删除不必要的括号:
square = \y -> y*y
f = \x -> square 3 + x
Run Code Online (Sandbox Code Playgroud)
最后,使用lambda抽象,我们可以定义square和f作为函数.同样,这是等效的代码¹:
square y = y*y
f x = square 3 + x
Run Code Online (Sandbox Code Playgroud)
此时,您可以更好地了解此代码.
¹ 实际上,编译器在内联时可能会优化这两种不同的内容,这只有在提供所有清单参数时才会发生,但这超出了本问题的范围.