以下代码正确地考虑在Haskell中进行currying。以下是haskell中添加的示例
f = \x -> \y -> x + y
总的来说,在函数式编程中使用lamdbas实现了curry?
答案 0 :(得分:5)
Currying是:
在数学和计算机科学中,currying是一种将函数的求值转换为评估函数序列的技术,这些函数将多个参数(或参数元组)转换为函数序列,每个函数都有一个参数。它由Gottlob Frege介绍,由MosesSchönfinkel开发,由Haskell Curry进一步开发。
现在你可以争辩说在Haskell中有一个从不一个函数的多个参数(你当然可以有元组 - 见下文) - 所以从某种意义上说Haskell中的所有函数已经 curried (或者只能以这种方式定义)。
curry :: ((a, b) -> c) -> a -> b -> c
curry f x y = f (x, y)
我可以说一个元组只是一个参数;)
在概念层面上,你当然是正确的,正如奥古斯丁指出的那样!
但遗憾的是存在一些问题(例如see Monomorphism Restriction),这种等式不成立(如果你不添加类型签名):
add x y = x + y === add = \x -> \y -> x + y