Questions tagged «currying»

咖喱化是将多个参数的函数转换为一个参数的函数的过程,该函数返回另一个函数,该函数比原始参数少一个参数。诸如Haskell之类的语言将其用作默认参数应用程序机制,因为它使某些编程技术(例如部分应用程序)更加容易。


14
currying和部分应用有什么区别?
我经常在Internet上看到各种抱怨,认为其他人使用的currying实例不是curying,而实际上只是部分应用。 我尚未找到关于什么是部分应用程序或它与currying有何不同的恰当解释。似乎存在一个普遍的混乱,在某些地方将等效示例描述为“ currying”,而在其他地方则将其部分应用。 有人可以给我提供这两个术语的定义,以及它们之间的区别的细节吗?

15
JavaScript库里:实际应用是什么?
我认为我还没有抱怨过。我了解它的作用以及如何去做。我只是想不出我会用它的情况。 您在JavaScript中的哪个地方使用currying(或者主要库在哪里使用它)?欢迎使用DOM操作或一般应用程序开发示例。 答案之一是动画。像功能slideUp,fadeIn需要一个元素作为参数,并通常是一个咖喱函数返回带有内置默认的“动画功能”高阶功能。为什么这比仅应用带有某些默认值的upper-up功能更好? 使用它有什么缺点吗? 根据要求,这里提供了一些有关JavaScript currying的良好资源: http://www.dustindiaz.com/javascript-curry/ Crockford,Douglas(2008)JavaScript:The Good Parts http://www.svendtofte.com/code/curried_javascript/ (绕过ML,所以从“ ML速成班”中跳过整个部分,然后从“如何编写咖喱JavaScript”开始) http://web.archive.org/web/20111217011630/http://blog.morrisjohns.com:80/javascript_closures_for_dummies JavaScript闭包如何工作? http://ejohn.org/blog/partial-functions-in-javascript(Resig先生照常付款) http://benalman.com/news/2010/09/partial-application-in-javascript/ 我会在评论中添加更多内容。 因此,根据答案,通常使用currying和部分应用是便捷技术。 如果您经常通过使用相同的配置调用它来“完善”一个高级函数,则可以使用(或使用Resig的partial)高级函数来创建简单,简洁的帮助器方法。

6
在Java 8中,带有2个箭头的lambda是什么意思?
我之前阅读过一些Java 8教程。 现在我遇到以下主题: Java是否支持Currying? 在这里,我看到以下代码: IntFunction<IntUnaryOperator> curriedAdd = a -> b -> a + b; System.out.println(curriedAdd.apply(1).applyAsInt(12)); 我了解此示例包含2个元素,但无法理解其构造: a -> b -> a + b; 根据表达式的左侧,该行应实现以下功能: R apply(int value); 在此之前,我只遇到一个箭头就遇到了lambda。
118 java  lambda  java-8  currying 




3
Scala中的两种计算方式;每个都有什么用例?
我正在维护的《 Scala风格指南》中讨论多个参数列表。我已经意识到有两种currying方式,而且我想知道用例是什么: def add(a:Int)(b:Int) = {a + b} // Works add(5)(6) // Doesn't compile val f = add(5) // Works val f = add(5)_ f(10) // yields 15 def add2(a:Int) = { b:Int => a + b } // Works add2(5)(6) // Also works val f = add2(5) f(10) // …

5
Scala currying与部分应用函数
我意识到这里有几个关于什么是currying和部分应用的函数的问题,但是我在问它们有什么不同。作为一个简单的示例,这是一个用于查找偶数的咖喱函数: def filter(xs: List[Int], p: Int => Boolean): List[Int] = if (xs.isEmpty) xs else if (p(xs.head)) xs.head :: filter(xs.tail, p) else filter(xs.tail, p) def modN(n: Int)(x: Int) = ((x % n) == 0) 因此,您可以编写以下代码来使用它: val nums = List(1,2,3,4,5,6,7,8) println(filter(nums, modN(2)) 返回:List(2,4,6,8)。但是我发现我可以这样做: def modN(n: Int, x: Int) = ((x % n) …

4
Scala中的多个参数列表和每个列表的多个参数之间有什么区别?
在Scala中,可以这样编写(咖喱?)函数 def curriedFunc(arg1: Int) (arg2: String) = { ... } 上面的curriedFunc带有两个参数列表的函数定义与单个参数列表中具有多个参数的函数之间的区别是什么: def curriedFunc(arg1: Int, arg2: String) = { ... } 从数学的角度来看,这是(curriedFunc(x))(y),curriedFunc(x,y)但我可以写def sum(x) (y) = x + y,同样是def sum2(x, y) = x + y 我只知道一个区别-这是部分应用的功能。但是这两种方式对我来说都是等效的。 还有其他区别吗?
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.