我每天都在阅读有关函数式编程的文章,并尝试尽可能地应用一些实践。但是我不明白在currying或部分应用程序中有什么独特之处。
以以下Groovy代码为例:
def mul = { a, b -> a * b }
def tripler1 = mul.curry(3)
def tripler2 = { mul(3, it) }
我不了解tripler1
和之间的区别tripler2
。他们不是都一样吗?在纯或部分功能的语言(例如Groovy,Scala,Haskell等)中支持“ currying”。但是,我可以通过简单地创建另一个命名或匿名方法来做相同的事情(left-curry,right-curry,n-curry或部分应用程序)函数或闭包将tripler2
大多数语言(甚至C)中的参数转发到原始函数(如)
我在这里想念什么吗?在某些地方可以在Grails应用程序中使用currying和Partial应用程序,但是我很犹豫这样做,因为我在问自己“那有什么不同?”
请赐教。
编辑:你们是说部分应用程序/ currying比创建/调用将默认参数转发到原始函数的另一个函数更有效吗?
f x y = x + y
表示该f
函数采用一个int参数。f x
(f
应用于x
)的结果是一个带有一个int参数的函数。结果f x y
(或(f x) y
,即f x
施加到y
)是不带任何输入参数,并且通过减少计算的表达式x + y
。