Questions tagged «currying»

15
currying有什么好处?
我刚刚学习了有关curry的知识,尽管我认为我理解了curry的概念,但在使用它方面并没有看到任何大的优势。 作为一个简单的示例,我使用一个将两个值相加的函数(用ML编写)。该版本不使用curry fun add(x, y) = x + y 并称为 add(3, 5) 而咖喱版本是 fun add x y = x + y (* short for val add = fn x => fn y=> x + y *) 并称为 add 3 5 在我看来,这只是语法糖,它从定义和调用函数中除去了一组括号。我已经看到currying被列为功能语言的重要功能之一,但现在我对此有点不知所措。创建只使用每个参数的函数链而不是使用元组的函数的概念对于语法的简单更改而言似乎相当复杂。 稍微简单的语法是否是引起混乱的唯一动机,还是我错过了一些在我非常简单的示例中并不明显的其他优点?只是语法糖吗?


3
是否可以同时具有欺骗和可变参数功能?
我正在考虑在动态类型的函数编程语言中同时提供currying和variadic函数,但是我想知道是否可行。 这是一些伪代码: sum = if @args.empty then 0 else @args.head + sum @args.tail 据说应该总结所有的论点。然后,如果sum本身被视为数字,则结果为0。例如, sum + 1 等于1,假设它+只能对数字起作用。但是,即使sum == 0是真的,sum无论给出多少个参数(因此同时“部分应用”和“变量”),它都将仍然保持其值和功能属性,例如,如果我声明 g = sum 1 2 3 则g等于6,但是,我们仍然可以进一步应用g。例如,g 4 5 == 15是真的。在这种情况下,我们不能用g文字替换对象6,因为尽管它们在被视为整数时会产生相同的值,但它们内部包含不同的代码。 如果将这种设计用于真实的编程语言中,是否会引起任何混淆或歧义?

4
currying或部分应用有什么特别之处?
我每天都在阅读有关函数式编程的文章,并尝试尽可能地应用一些实践。但是我不明白在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比创建/调用将默认参数转发到原始函数的另一个函数更有效吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.