问题标签 [function-composition]

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 投票
1 回答
6036 浏览

haskell - 反向语法的函数组合

如果我想申请f第一和g第二,我必须写:

是否有另一种标准语法可以让我以相反的顺序编写函数?

我知道我可以发明自己的语法:

然后像这样使用它:

但我宁愿使用标准库设施。

0 投票
2 回答
141 浏览

f# - 元组函数组合

我很好奇为什么会这样

给出错误

没有名为“Equals”的可访问成员或对象构造函数接受 1 个参数

但这有效

0 投票
2 回答
2877 浏览

scala - Scala 中方法、函数和部分应用函数的函数组合

有点类似于 Stack Overflow 问题Compose 和 andThen methods,我一直在研究 Twitter 的Scala School教程,并很快遇到了评论者遇到的同样问题(这很棒,因为我上床睡觉时以为我的问题已经解决了)。

在本教程中,它定义了两种方法:

而在较新版本的 Scala 中,您不能像这样调用 compose: addUmm(_).compose(addAhem(_)),接受的答案(以及其他一些答案似乎取决于addUmmandaddAhem是方法而不是函数的事实,这在尝试时会产生问题调用 compose. 我满意地上床睡觉,成功运行:

凉爽的。问题是,虽然不能编写方法是有道理的,但当我用我知道的值评估相同的东西时Function1

好吧,最后一行出现了与原始问题相同的错误,尽管这次它们是函数的部分应用,而不是方法。原始问题中的一个答案(排名靠前,但不是公认的答案)似乎暗示它与部分应用程序的扩展方式有关,解释是什么?

对于 Scala 新手来说,a(_).compose(b(_))无论您是否明确指定_: String这两个地方,推理器都会出错,但a.compose(b)确实有点令人困惑。

0 投票
3 回答
20649 浏览

haskell - Haskell Monad 绑定运算符混淆

好的,所以我不是 Haskell 程序员,但我对 Haskell 背后的许多想法非常感兴趣,并且正在研究学习它。但我被困在第一方:我似乎无法围绕 Monads,这似乎是相当基本的。我知道关于 SO 有上百万个问题要求解释 Monads,所以我将更具体地说明困扰我的问题:

我阅读了这篇优秀的文章(Javascript 简介),并认为我完全理解了 Monads。然后我阅读了关于 Monads 的维基百科条目,看到了这个:

多态类型(M t)→(t→M u)→(M u)的绑定操作,Haskell用中缀运算符>>=表示。它的第一个参数是一个单子类型的值,它的第二个参数是一个从第一个参数的基础类型映射到另一个单子类型的函数,它的结果是另一个单子类型。

好的,在我引用的文章中,bind 是一个只接受一个参数的函数。维基百科说两个。我认为我对 Monads 的理解如下:

  1. Monad 的目的是获取具有不同输入和输出类型的函数并使其可组合。它通过使用单个 monadic 类型包装输入和输出类型来做到这一点。
  2. Monad 由两个相互关联的函数组成:bind 和 unit。Bind 接受一个不可组合的函数 f 并返回一个新函数 g,该函数接受单子类型作为输入并返回单子类型。g 是可组合的。unit 函数接受 f 期望的类型的参数,并将其包装在 monadic 类型中。然后可以将其传递给 g,或者传递给像 g 这样的函数的任何组合。

但是肯定有什么问题,因为我的绑定概念有一个参数:一个函数。但是(根据维基百科)Haskell 的绑定实际上需要两个参数!我的错误在哪里?

0 投票
3 回答
568 浏览

haskell - 我如何用我的一元动作惯用地组织我的纯函数

我决定今天是我修复一些在单子动作中不必要地运行的纯函数的日子。这就是我所拥有的。

到目前为止,这是 flagWeekEnds。

flagHolidays遵循类似的模式。toWorkDays只是将一种类型更改为另一种类型,并且是一个纯函数。

flagScheduled,并且flagASAP是一元动作。我不确定如何将 monadic 动作与flagWorkDays. 有人可以帮我修复flagWorkDays,假设flagWeekEnds并且flagHolidays已经变得纯净了吗?

0 投票
2 回答
947 浏览

haskell - 折叠、函数组合、单子和惰性,哦,天哪?

我很困惑。我可以这样写:

输出是1。这是有道理的,因为它简化为:

但如果我使用一种模糊相似的单子技术,它的工作原理就不一样了:

这命中prelude.Undefined。这很奇怪,因为我希望它会减少:

但是,翻转合成顺序:

确实完成了预期的短路并产生Nothing.

我想比较这两种方法可能是比较苹果和橙子,但你能解释一下区别吗?我认为这f <=< g是 monadic 的类似物f . g,但它们显然不像我想象的那样类似。你能解释一下为什么吗?

0 投票
2 回答
1979 浏览

haskell - 组成一个 2 参数函数链

所以我有一个类型的两个参数的函数列表[a -> a -> a]

我想编写一个函数,它将获取列表并将它们组合成一个函数链,该函数链采用左侧组成的长度 + 1 个参数。例如,如果我有[f,g,h]所有类型,[a -> a -> a]我需要编写一个函数,它给出:

此外,如果它有帮助,这些函数在它们的参数中是可交换的(即f x y = f y x对于所有x y)。

鉴于我知道相关函数的数量,我可以在列表理解中执行此操作,它几乎与定义完全相同。这是从固定数量的函数到动态数量的延伸,这让我很难过。

这是我到目前为止所拥有的:

我认为逻辑是正确的,它只是不进行类型检查。

提前致谢!

0 投票
1 回答
221 浏览

haskell - Haskell:用通用类型组合一个特定类型的函数?

我在 GHCi 中编写了一个快速的单行代码,并尝试用 map 组合总和。我认为它失败的原因是因为 map 给出了一般类型 [b] 的输出,而 sum 接受特定输入 Num a => [a]。但是,假设 map 函数的输出类型为 Num b => [b],则这段代码没有任何问题。

我认为编写限制类型声明可能有效(尽管我猜这会阻止您在 GHCi 中这样做),但它仍然没有:

给了我以下错误:

有没有办法做到这一点?也许我只是错过了一些明显的东西(Haskell 的新手)。

0 投票
3 回答
683 浏览

c# - lambda 表达式 c#

我想知道如何使用 lambda 表达式进行函数组合。我的意思是,我有 2 个函数 f(x) 和 g(x)。如何使用 lambda 表达式制作它们的组合 f(g(x))?谢谢

0 投票
1 回答
5871 浏览

python - 组合函数和功能模块

Python 3.2 文档引用了Collin Winter 的functional模块,其中包含函数compose

compose() 函数实现了函数组合。换句话说,它返回一个围绕外部和内部可调用对象的包装器,这样内部的返回值就会直接馈送到外部。

不幸的是,这个模块自 2006 年 7 月以来就没有更新过;我想知道是否有任何替代品。

现在,我只需要compose函数。下面的原始functional.compose定义对 Python 3 仍然有用吗?

这个SO question有点相关;它询问 Python 是否应该支持compose.