问题标签 [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 回答
4556 浏览

scala - Scala - 柯里化和默认参数

我有一个带有两个参数列表的函数,我试图部分应用和使用柯里化。第二个参数列表包含所有具有默认值(但不是隐式)的参数。像这样的东西:

现在,以下一切都很好:

现在,如果我定义:

然后可以进行以下操作:

有人可以解释为什么我不能在“部分”中省略一些/所有参数,如下所示:

写“部分”的行为不应该与“test(1)”基本相同吗?有人可以帮我找出实现这一目标的方法吗?

请帮忙,我很绝望!

编辑- 由于我无法在 24 小时内回答我自己的问题,我将在此处发布我自己的答案:

到目前为止,这是我自己能做到的最好的:

这样就可以了...

0 投票
5 回答
4425 浏览

wolfram-mathematica - 使用 Mathematica 进行柯里化

可以使用以下结构在 Mathematica 中实现一种有限形式的柯里化:

允许一个人做,例如:


有一个问题:Attributes仅适用于第一个(一组)参数。考虑:

我的意图是返回"8 / 4""3 + 5"在列表中。


最后:

  • 有没有办法将属性扩展到这个构造?

  • 是否有另一种方便的结构来实现这一目标?

  • 除了属性之外,还有其他方法可以在 Mathematica 中扩展 Currying 吗?

0 投票
2 回答
259 浏览

scala - 带有咖喱功能的奇怪东西

我有这种奇怪的情况,我不明白。我正在阅读“Scala 编程”一书,Ch。9.

假设我有一个咖喱函数:

当我在特殊的 curly-syntax 中使用一个参数调用它时,它按预期工作:

但是,如果我提出两个陈述,我会得到一些奇怪的东西:

“你好!”怎么来的?在“之前”之前打印,然后在里面打印“5”?我疯了吗?

0 投票
17 回答
46859 浏览

javascript - 可变咖喱和函数

我需要一个 js sum 函数才能像这样工作:

听说做不到 不过听说如果加+在前面sum就可以了。喜欢+sum(1)(2)(3)(4)
关于如何做到这一点的任何想法?

0 投票
3 回答
4514 浏览

haskell - 使用currying的参数排序

我最近两次重构代码以更改参数的顺序,因为有太多的代码喜欢flip\x -> foo bar x 42正在发生黑客攻击。

在设计函数签名时,哪些原则可以帮助我充分利用柯里化?

0 投票
3 回答
2456 浏览

f# - 反向柯里化?

我想以某种方式组合函数。请在伪代码(不是 F#)中考虑这两个函数

我想让 F# 做的是弄清楚,因为

该代码let F2 = F1 * 10会给我与 F1: 相同的签名val F2 : int -> int -> int,并且调用F2 2 3将导致 50: (2 + 3) * 10。这将是相当聪明的......

发生的事情完全不同。第一行按预期进行:

但是当我添加第二行时let F2 = F1 * 10,它会抛出 F#。它现在抱怨那个the type int does not match the type 'a -> 'b -> 'c和那个 F1 requires member ( + )

我当然可以这样拼写:

但现在我还不如使用 C#,我们不再那么遥远了。元组参数破坏了 F# 的许多优雅。此外,我的真实函数 F1 和 F2 的参数远不止 2 个,所以这让我眼花缭乱,这正是我想通过使用 F# 来躲避的。像这样说会更自然:

有什么办法我可以(几乎)做到这一点?

额外积分:这些错误消息到底发生了什么?为什么第二行let F2 = F1 * 10会改变第一行的打字?

提前感谢您的想法,

格特-扬

更新 两个(几乎)做所描述的事情。

一个使用元组。第二行看起来有点古怪,工作正常。小缺点是我现在不能使用柯里化,否则我将不得不添加更多古怪的代码。

另一种方法是使用记录。乍一看,这更直接,更容易理解,但需要更多的代码和仪式。确实去掉了 F# 的一些优雅,看起来更像 C#。

0 投票
17 回答
36869 浏览

java - Java 支持柯里化吗?

我想知道是否有任何方法可以在 Java 中提取它。我认为如果没有对闭包的本机支持,这是不可能的。

0 投票
8 回答
3096 浏览

haskell - 如何在 Haskell 中定义 Lisp 的应用?

在像 Haskell 这样的函数被柯里化的惰性语言中不应该允许这个定义吗?

它基本上是一个将给定函数应用于给定参数列表的函数,例如在 Lisp 中很容易完成。有什么解决方法吗?

0 投票
2 回答
5067 浏览

haskell - Haskell 中带有元组参数的函数组合

有时我有两种形式的功能:

我需要作文g。我通过将 h 更改为 h' 来解决这个问题:

你能告诉我(如果可能的话)一个函数 m,这样:

或者另一种处理这种情况的方法。谢谢。

0 投票
5 回答
2156 浏览

scala - 是否可以在 Scala 中“咖喱”更高种类的类型?

假设我有一个带有两个类型参数的特征,例如

和另一个具有更高类型参数的特征,例如

我希望能够将一个固定值替换为 的类型参数之一Qux,以便它可以用于参数化Turkle

这是一个示例(在 Scala 中没有意义的代码!):

任何人有任何想法如何实现这种效果?