Ren*_*ene 3 haskell functional-programming partial-application
我有部分应用的函数add来创建一个新函数addOne.
add :: Int -> (Int -> Int)
add x y = x + y
Run Code Online (Sandbox Code Playgroud)
addOne可以使用显式参数定义
addOne :: Int -> Int
addOne y = add 1 y
Run Code Online (Sandbox Code Playgroud)
或没有explict参数
addOne :: Int -> Int
addOne = add 1
Run Code Online (Sandbox Code Playgroud)
我有四个问题:
因为addOne y = add 1 y
手段addOne = \y -> add 1 y
,而且\x -> f x
永远是公正的f
.这称为eta等价.所以addOne = add 1
.
没有
总是.函数参数只是lambdas的语法糖:
add :: Int -> Int -> Int
add = \x y -> x + y
Run Code Online (Sandbox Code Playgroud)
是否可以完全删除变量绑定是另一回事.
"eta reduce"总是很好(也就是说,当它与匹配表达式中的函数应用程序匹配时,删除函数绑定中最右边的绑定变量),因为它可以避免引入多余的名称.