currying相关内容

什么是“柯里化"?

我在几篇文章和博客中看到了对柯里化函数的引用,但我找不到一个好的解释(或者至少是一个有意义的解释!) 解决方案 柯里化是将一个接受多个参数的函数分解为一系列函数,每个函数只接受一个参数.下面是一个 JavaScript 示例: function add (a, b) {返回 a + b;}添加(3, 4);//返回 7 这是一个函数,它接受两个参数,a 和 b,并返回它们的和.我们现在 ..

Scala - 柯里化和默认参数

我有一个带有两个参数列表的函数,我试图部分应用和使用柯里化.第二个参数列表包含所有具有默认值(但不是隐式)的参数.像这样的: def test(a: Int)(b: Int = 2, c: Int = 3) { println(a + ", " + b + ", " + c);} 现在,以下一切都很好: test(1)(2, 3);测试(1)(2);测试(1)(c=3);测试(1)(); ..
发布时间:2022-01-21 22:20:08 其他开发

用于并行执行的 Currying groovy CPS 闭包

我们在某些工作中动态创建并行步骤.感谢 this thread 我发现如何使用参数动态创建地图以在并行步骤中使用. 但是现在我想重用用于创建这些并行步骤的部分代码.为此,我觉得我需要咖喱闭包. 但是,currying 似乎无法正常工作.在闭包内引用循环变量(valueCopy)是正确的(as described here) 但currying并没有达到我的预期. 我是不是做错了什 ..

“不客气".NET 中的实例方法

您能否在创建时不指定实例的情况下创建实例方法的委托?换句话说,您能否创建一个“静态"委托,将调用该方法的实例作为其第一个参数? 例如,如何使用反射构造以下委托? Func= i=>i.ToString(); 我知道我可以使用 methodInfo.Invoke,但这会比较慢,并且在调用它之前不会检查类型正确性. 当您拥有特定静态方法的MethodInfo时,可以使用Delegate ..
发布时间:2022-01-18 12:11:58 C#/.NET

是否可以对 Lisp 家族语言实现自动柯里化?

也就是说,当您仅使用一个参数调用具有 >1 元数的函数时,它应该不显示错误,而是将该参数柯里化并返回具有减少的元数的结果函数.使用 Lisp 的宏可以做到这一点吗? 解决方案 在 Scheme 中,可以使用 curry 过程对函数进行柯里化: (定义(添加 x y)(+ x y))(加1 2);非柯里化过程调用(咖喱加);柯里化过程,需要两个参数((咖喱加) 1) ;咖喱过程,需要一个参 ..
发布时间:2022-01-02 23:07:17 其他开发

uncurry ($) 有什么作用?

我正在做一些练习,我必须添加函数的类型并解释它的作用.我坚持这个: phy = uncurry ($) 类型,根据 GHCi 是 phy :: (a -> b, a) ->b.我的 Haskell 知识很基础,所以我真的不知道它是做什么的. 解决方案 让我们系统地拼出类型部分.我们将从 uncurry 和 ($) 的类型开始: uncurry :: (a -> b -> c) ->( ..
发布时间:2022-01-02 14:05:30 其他开发

F#柯里化函数

谁有一个像样的例子,最好是实用/有用的,他们可以发布演示这个概念吗? 解决方案 (编辑:一个小的 Ocaml FP Koan 开始) 咖喱公案(关于食物的公案,与食物无关) 一位学生来到雅克·加里格 (Jacques Garrigue) 说:“我不明白咖喱有什么好处."雅克回答说:“告诉我你最喜欢的一餐和你最喜欢的甜点".困惑的学生回答说他喜欢御好烧和kanten,但是虽然 ..
发布时间:2022-01-02 14:05:03 其他开发

柯里化的实际优势是什么?

我看到了很多关于柯里化技术是什么的文档和问题,但我发现很少有关于为什么在实践中使用它的信息.我的问题是,柯里化的优点是什么?也许你可以提供一个简单的例子,说明柯里化比传统的方法调用更可取. 我在太阳升起的时候用 C++ 工作,所以到目前为止,除了下班后修补语言之外,我几乎没有接触过柯里化. 解决方案 首先,将偏函数应用误认为柯里化是很常见的.例如,请参见 this(我确定有更好的资源 ..
发布时间:2022-01-02 14:04:51 其他开发

柯里化函数的实际使用?

有大量关于如何使用柯里化函数的教程,以及在 stackoverflow 上的许多问题.然而,在阅读了 The Little Schemer、几本书、教程、博客文章和 stackoverflow 线程后,我仍然不知道这个简单问题的答案:“柯里化有什么意义?"我确实了解如何咖喱函数,而不是“为什么?"后面. 有人可以向我解释柯里化函数的实际用途吗(在每个函数只允许一个参数的语言之外,使用柯里化的 ..
发布时间:2022-01-02 14:02:25 其他开发

“非咖喱".NET 中的实例方法

是否可以在创建时不指定实例的情况下创建实例方法的委托?换句话说,您能否创建一个“静态"委托,该委托将调用方法的实例作为第一个参数? 例如,如何使用反射构造以下委托? Func= i=> i.ToString(); 我知道我可以使用methodInfo.Invoke,但速度较慢,并且在调用之前不会检查类型正确性. 当您拥有特定静态方法的MethodInfo时,可以使用Delegate ..
发布时间:2022-01-02 13:47:34 C#/.NET

如何编写一个返回另一个函数的函数?

在 Python 中,我想编写一个函数 make_ cylinder_volume(r) 返回另一个函数.返回的函数应该可以使用参数 h 调用,并返回高度为 h 和半径为 r 的圆柱体的体积. 我知道如何从 Python 中的函数返回值,但如何返回另一个函数? 解决方案 试试这个,使用 Python: 导入数学def make_圆筒_体积_func(r):定义体积(h):返回 ma ..
发布时间:2022-01-02 13:39:51 Python

Java 支持柯里化吗?

我想知道是否有任何方法可以在 Java 中提取它.我认为没有对闭包的原生支持是不可能的. 解决方案 Java 8(2014 年 3 月 18 日发布)确实支持柯里化.missingfaktor的答案中发布的示例Java代码可以重写为: import java.util.function.*;导入静态 java.lang.System.out;//使用 JDK 1.8.0-ea-b75 测 ..

如何在 C++ 中进行柯里化?

什么是咖喱? 如何在 C++ 中实现柯里化? 请解释 STL 容器中的绑定器? 解决方案 简而言之,柯里化需要一个函数 f(x, y) 并给定一个固定的 Y,给出一个新函数 g(x) where g(x) == f(x, Y) 这个新函数可以在只提供一个参数的情况下被调用,并将调用传递给带有固定 Y 参数的原始 f 函数.> STL 中的绑定器允许您为 C++ 函数执行此 ..
发布时间:2022-01-02 13:27:15 C/C++开发

有没有办法在 C 中进行柯里化?

假设我有一个指向函数 _stack_push(stack* stk, void* el) 的指针.我希望能够调用 curry(_stack_push, my_stack) 并返回一个只需要 void* el 的函数.我想不出办法来做到这一点,因为 C 不允许运行时函数定义,但我知道这里有比我更聪明的人:).有什么想法吗? 解决方案 我找到了 Laurent Dami 的一篇论文,讨论了 C ..
发布时间:2022-01-02 13:23:56 其他开发

是否可以在 PHP 中咖喱方法调用?

我有一个为 WSDL 文件生成的 SoapClient 实例.除了其中一个方法调用之外的所有方法都需要传递用户名和密码 id. 有什么办法可以将方法调用柯里化,这样我就可以省略用户名和密码吗? 解决方案 从 php 5.3 开始,您可以存储 变量中的匿名函数.这个匿名函数可以使用一些预定义的参数调用“原始"函数. function foo($x, $y, $z) {echo "$x ..
发布时间:2021-12-24 09:47:16 PHP

在 C# 中正确的柯里化

给定一个方法 DoSomething,它接受一个(无参数)函数并以某种方式处理它.有没有比下面的代码片段更好的方法来为带参数的函数创建“重载"? public static TResult DoSomething(Funcfunc){//调用func()并做其他事情}public static TResult DoSomething(Func功能,T0 arg0){返回 ..
发布时间:2021-12-23 22:02:03 C#/.NET

柯里化是如何工作的?

总的来说,我对 Haskell 和 FP 很陌生.我已经阅读了许多描述什么是柯里化的文章,但我还没有找到它的实际工作原理的解释. 这是一个函数:(+) :: a ->(a -> a)如果我执行 (+) 4 7,该函数采用 4 并返回一个采用 7 并返回 11 的函数>.但是 4 会发生什么?第一个函数对 4 有什么作用?(a -> a) 和 7 有什么关系? 当我想到一个更复杂的函数时 ..
发布时间:2021-12-14 12:16:39 其他开发