我很难通过网络上的几个来源理解currying。还有更直观的currying例子吗?
此外,它与传统编程范式相比有哪些优势?是否可以通过非功能性编程来实现?
答案 0 :(得分:3)
想象一个具有多个参数add(a,b) = a + b
的函数。此功能添加两个数字。现在想象一下,在某些上下文中,你需要一个只需要一个参数的函数,你想要一个添加了5的函数。该函数可能如下所示:adds5(x) = 5 + x
。
现在,在某些情况下,你需要一个增加5的函数,在其他上下文中增加10个。所以你可以编写一个返回a的函数,而不是编写与其他常量一样的函数。向第一个函数添加作为参数的常量的函数:adder(a) = (b) = a + b
。
函数add
和adder
看起来非常相似。 add
接受2个参数并添加它们,adder
返回一个函数,该参数将adder
的参数添加到其自己的参数中。
将add
转换为adder
称为currying。
由于这与函数有很大的关系,我会说当有currying时,那就是函数式编程。您可以使用任何编程语言进行函数式编程 - 毕竟,所有图灵完整语言都是等同的;-),但在支持函数作为一等公民的函数式语言中,它更容易。