问题标签 [currying]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
10659 浏览

haskell - 将元组的元素作为 Haskell 中的参数提供给函数?

在我的 Haskell 程序中,我想使用 printf 来格式化元组列表。我可以将 printf 映射到一个列表上,以一次打印出一个值,如下所示:

我希望能够做这样的事情:

但这会将一个元组传递给 printf,而不是两个单独的值。如何将元组转换为 printf 的两个参数?

0 投票
1 回答
6193 浏览

functional-programming - currying 的实际优势是什么?

我看到很多关于什么是柯里化技术的文档和问题,但我发现很少有人会在实践中使用它的信息。我的问题是,咖喱有什么好处?也许您可以提供一个简单的示例,其中柯里化比传统的方法调用更可取。

我在太阳升起时使用 C++ 工作,所以到目前为止,除了在工作中修补语言之外,我几乎没有接触过柯里化。

0 投票
3 回答
607 浏览

c++ - 对 STL 容器上的循环进行返工以使用功能技术

我有一个std::vector指针Person对象,它有一个成员函数std::string getName() const。使用 STL 算法,我想计算Person向量中getName()返回“Chad”的所有对象。

简单地迭代循环的行为将是:

我想重新设计它,以便它使用所有 STL 算法和仿函数等(使其更加面向功能)。这是我认为我需要做的:

正如您可能会说的那样,这是行不通的。首先,据我了解,您不能在 binder1st/binder2nd 对象上使用 bind1st/bind2nd,因为它们是专门为使用std::binary_functions. 其次,更重要的是,我认为我没有使用正确的技术。我确实想将其中一个参数绑定到“Chad”,但是对于迭代器参数,我实际上只想在调用绑定版本之前将迭代器值转换为字符串equals_to

我认为使用 Boost 可以做到这一点,但是否可以只使用核心 C++03(即没有 C++0x 羔羊!)?

编辑:谁能想出一个不使用用户定义谓词的示例(即仅使用 std 工具包中提供的工具)?

编辑:虽然 Matthieu 的答案是关于如何在 STL 算法中使用函子的教科书答案,但 Cubbi 的答案来自我正在寻找的方法(尽管在我编辑问题以使其更具体之前,Mathieu 确实回答了,所以在这里道歉!)。

0 投票
1 回答
678 浏览

scala - 从scala中的部分应用函数获取参数

scala有没有办法从已经部分应用的函数中取回参数?

这是否有意义、应该完成或适合任何用例?

例子:

def doStuff(lower:Int,upper:Int,b:String)= for(turn <- lower to upper) println(turn +": "+b)

想象一下,有一次我知道“较低”的论点,并且我得到了一个将它应用到“doStuff”的函数

val lowerDoStuff = doStuff(3,_:Int,_:String)

有没有办法让我拿回那个3?(例如,假设我在一个只收到“lowerDoStuff”的函数中,现在需要知道第一个参数)

惯用的 scala 优于内省/反思(如果可能)。

0 投票
3 回答
11502 浏览

clojure - Clojure 中的高阶函数

Clojure 很棒,我们都知道,但这不是重点。我想知道以类似 Haskell 的方式创建和管理高阶函数的惯用方式是什么。在 Clojure 中,我可以执行以下操作:

(sum 1)不返回函数:它会导致错误。当然,你可以这样做:

在这种情况下:

但这似乎不是正确的方法。有任何想法吗?
我不是在谈论实现该sum功能,而是在更高的抽象层次上谈论。是否有任何惯用的模式可以遵循?一些宏?是定义宏的最佳方法还是有替代解决方案?

0 投票
2 回答
6348 浏览

r - R中的柯里化函数

是否可以使用柯里R

一种可能性是具有特殊功能(它可以被认为是对这里paste的跟进),例如(在不正确的代码中):

什么是可能的实现R

PS:这paste只是一个例子,我很好奇R......

0 投票
1 回答
419 浏览

c# - 在具有不同类型 args 的 Func 之间进行转换

是否有用于在各种类型的 Func 委托之间进行转换的内置方法?也就是说,假设您需要一个 Func,但您有一个 Func(并且您有应该为 T 参数传入的值)。例如:

我自己写了,像这样:

但我想知道是否存在这样的一系列方法(或者即使有更好的方法来做到这一点)。

本质上,我这样做是为了在方法中有一些样板代码,然后是函数调用(函数中的数量和类型会有所不同,但返回类型相同),然后是更多样板代码车牌代码。

欢迎大家发表意见!谢谢。

0 投票
3 回答
479 浏览

haskell - 部分应用程序在运行时如何表示?

当我map (1+) list在 Haskell 中编写类似的东西时,内部表示是(1+)什么?由于它是 的部分应用(+),因此必须将参数1保存在某个地方,但我无法理解这一点。有人可以给我一个简短的解释,如何实现柯里化和部分应用?

0 投票
2 回答
535 浏览

c# - .Net 支持咖喱泛型吗?

假设我们有一个嵌套的泛型类:

这里,typeof(A<int>.B<>)本质上是一个具有两个参数的泛型类,其中只有第一个被绑定。

如果我有一个带有两个参数的类

有没有办法提到“AB保持T=int开放U”?如果不是,这是 C# 限制还是 CLR 限制?

0 投票
2 回答
1899 浏览

c# - C# 中的柯里化表达式

我正在尝试构建一个表达式树,我可以将它输入到 Linq2SQL 中,以便它生成一个很好的干净查询。我的目的是构建一个过滤器,将任意一组单词与 AND 和 NOT(或 OR 和 NOT)结合在一起。因为我想改变我搜索的字段,所以我最好Expresssion<Func<T, string, bool>>通过调用各种辅助函数来组合一个 's 列表(其中 T 是我正在操作的实体)。然后我会收到一个单词数组并循环遍历它们并构建一个Expresssion<Func<T, bool>>up(在必要时否定某些表达式),我最终可以将其提供给 .Where 语句。

我一直在使用 LINQKit PredicateBuilder,但这段代码处理的是单参数表达式。但是,它为我自己的尝试提供了一些基础。我的目标是做这样的事情:

但是由于我使用的是表达式,所以由 >>>> 标记的行显然是非法的(不能e(p, w)像我对函数那样做)。所以我的问题是如何将单个变量(单词)部分应用于包含具有多个参数的函数的表达式?


好的,在 LINQPad 中摆弄并找到了一个适合我的解决方案。这个问题让我到了那里。我对构建表达式树很陌生,所以我会很感激(并赞成)任何带有改进或批评的评论/答案。