问题标签 [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.
scala - Scala - 柯里化和默认参数
我有一个带有两个参数列表的函数,我试图部分应用和使用柯里化。第二个参数列表包含所有具有默认值(但不是隐式)的参数。像这样的东西:
现在,以下一切都很好:
现在,如果我定义:
然后可以进行以下操作:
有人可以解释为什么我不能在“部分”中省略一些/所有参数,如下所示:
写“部分”的行为不应该与“test(1)”基本相同吗?有人可以帮我找出实现这一目标的方法吗?
请帮忙,我很绝望!
编辑- 由于我无法在 24 小时内回答我自己的问题,我将在此处发布我自己的答案:
到目前为止,这是我自己能做到的最好的:
这样就可以了...
wolfram-mathematica - 使用 Mathematica 进行柯里化
可以使用以下结构在 Mathematica 中实现一种有限形式的柯里化:
允许一个人做,例如:
有一个问题:Attributes
仅适用于第一个(一组)参数。考虑:
我的意图是返回"8 / 4"
并"3 + 5"
在列表中。
最后:
有没有办法将属性扩展到这个构造?
是否有另一种方便的结构来实现这一目标?
除了属性之外,还有其他方法可以在 Mathematica 中扩展 Currying 吗?
scala - 带有咖喱功能的奇怪东西
我有这种奇怪的情况,我不明白。我正在阅读“Scala 编程”一书,Ch。9.
假设我有一个咖喱函数:
当我在特殊的 curly-syntax 中使用一个参数调用它时,它按预期工作:
但是,如果我提出两个陈述,我会得到一些奇怪的东西:
“你好!”怎么来的?在“之前”之前打印,然后在里面打印“5”?我疯了吗?
javascript - 可变咖喱和函数
我需要一个 js sum 函数才能像这样工作:
听说做不到 不过听说如果加+
在前面sum
就可以了。喜欢+sum(1)(2)(3)(4)
。
关于如何做到这一点的任何想法?
haskell - 使用currying的参数排序
我最近两次重构代码以更改参数的顺序,因为有太多的代码喜欢flip
或\x -> foo bar x 42
正在发生黑客攻击。
在设计函数签名时,哪些原则可以帮助我充分利用柯里化?
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#。
java - Java 支持柯里化吗?
我想知道是否有任何方法可以在 Java 中提取它。我认为如果没有对闭包的本机支持,这是不可能的。
haskell - 如何在 Haskell 中定义 Lisp 的应用?
在像 Haskell 这样的函数被柯里化的惰性语言中不应该允许这个定义吗?
它基本上是一个将给定函数应用于给定参数列表的函数,例如在 Lisp 中很容易完成。有什么解决方法吗?
haskell - Haskell 中带有元组参数的函数组合
有时我有两种形式的功能:
我需要作文g。我通过将 h 更改为 h' 来解决这个问题:
你能告诉我(如果可能的话)一个函数 m,这样:
或者另一种处理这种情况的方法。谢谢。
scala - 是否可以在 Scala 中“咖喱”更高种类的类型?
假设我有一个带有两个类型参数的特征,例如
和另一个具有更高类型参数的特征,例如
我希望能够将一个固定值替换为 的类型参数之一Qux
,以便它可以用于参数化Turkle
。
这是一个示例(在 Scala 中没有意义的代码!):
任何人有任何想法如何实现这种效果?