问题标签 [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 投票
2 回答
560 浏览

haskell - Haskell currying 在最后删除参数变量

我是一个尝试学习haskell的新手,我试图在其他论坛中搜索类似的东西,但找不到类似的问题。

运行良好

但是当我最后删除 x 时,它会出错

错误说:

无法弄清楚我在这里缺少什么。

免责声明:这不是作业问题

0 投票
7 回答
15837 浏览

c++ - C++/C++11 中的函数组合

我目前正在用 C++11 编写一些需要大量函数组合的加密算法。我必须处理两种类型的组合:

  1. 在其自身上组合一个函数的次数不定。在数学上,对于某个函数 F,F^n(x) = (F^{n-1} o F)(x) = F^{n-1}(F(x))。

  2. 将不同的功能组合在一起。例如,对于某些相同类型的函数 f,g,h,i,j 和 k,我将有 f(g(h(i(j(k(x))))))。

就我而言,我使用 F 的以下定义:

我想自己编写这个函数 n 次。我以一种简单的递归方式实现了组合,效果很好:

对于这种情况,是否有更有效的方法可以使用 c++11 但不使用 BOOST来实现这种组合?当然,如果可能的话,使用这种形式会很棒:

对于第二种情况,我想实现可变数量的函数的组合。对于给定的一组函数 F0, F1, ..., Fn 与 F 具有相同的定义,是否有一种有效且适当的方法来组合它们,其中 n 是可变的?我认为可变参数模板在这里会很有用,但我不知道在这种情况下如何使用它们。

谢谢你的帮助。

0 投票
1 回答
209 浏览

types - 为什么 Console.WriteLine 不能确定我的类型?在 F#

这是我的代码:

我想熟悉函数组合运算符的工作方式,但由于某种原因,F# 找不到函数的最佳重载...

在我明确声明参数的示例中,它将类型设置为val print : x:('a * int) list -> unit,因此我使用组合运算符明确设置函数中的类型,<<希望我能得到正确的结果......我没有......

然后我something使用显式声明的参数类型创建函数,只是为了看看它会返回什么......它返回这个:val something : x:(string * int) list -> string list

所以它肯定会返回一个类型......一个字符串列表,我知道 Console.WriteLine 能够打印......那么为什么它告诉我它无法确定重载?

0 投票
1 回答
327 浏览

r - 如何在列表上应用“组合”功能

我想在数据框的所有列上应用“组合”函数。

例如,sum(is.na)。但:

返回错误。

当然,一个“简单”的功能确实有效,例如

那么,我们如何应用“函数的函数”呢?

特别是,我想到的组合功能是

生成的图形与数据框中的列数一样多。

0 投票
0 回答
722 浏览

ocaml - 如何在 OCaml 中编写通用积分函数

我想在 OCaml 中编写一个函数来计算给定函数的定积分。问题是我的目标是以下语法:

问题是使用梯形规则之类的规则我需要编写如下内容:

期望f aandf b不是部分应用的功能。

我不希望最后一个integral函数调用的结果会返回一个浮点数,我对一些函数完全没问题。

我意识到这个问题非常不具体。让我以更一般的方式重申它:

我有一个功能float->float->float,在应用integral功能后应该给我float->float。它应该是一般的,所以integraloffloat->float应该导致float.

问题是我需要减去两个相同顺序的函数:f(a) -. f(b),它们都可以是float->float->floatfloat->float甚至是float->float->float

要减少函数的顺序,我需要一个签名,例如:(float->'a->float) -> ('a->float).

这甚至可能吗?特别是在 OCaml 中?

我越是考虑让一个函数计算可以链接的积分的问题,就越觉得这是一项不可能完成的任务/愚蠢的方法。

事实上,我已经实现了这一点,但使用了我自己的数据类型(称为function_typewhich can be Scalar3rdOrderFunction, Scalar2ndOrderFunction, Scalar1stOrderFunction, Scalar0thOrderFunction)。但是对于多态性的奖品,当我尝试对 function 应用积分三次时,编译器无法警告我float->float->float

0 投票
1 回答
322 浏览

scala - 高阶函数中的类型定义和类型不匹配

我目前正在学习 Martin Odersky 的 Coursera 课程的视频讲座,Scala 中的函数式编程原理。在第 2.1 课中,他演示了使用基函数sum(). 他实现了没有尾递归的阶乘,但我尝试了尾递归,因为它仍然只是一行代码。结果,我得到了类型不匹配,我认为 Odersky 没有。在定义sum()中,参数f接受一个Int并返回一个Int。我知道我可以通过调整我的函数*来解决这个问题,但这让我想知道如何设计高阶函数。 有没有办法可以调整或规避这种类型定义,以允许函数采用灵活数量的参数? 曾经有人给我看了一点 Haskell,我想知道 Scala 的函数参数是否可以以类似的松散方式键入……或者也许有一个更适合 Scala 的不同解决方案。请假设我昨天刚开始使用 Scala,并且在您的解释中计算机科学知识有限,因为情况确实如此。

*我知道我可以通过将我的 current 嵌套fact()在另一个函数中来解决这个问题,如下所示:

我从前面提到的 Haskell 经验中得到的印象是,函数式编程促进了只需要一个参数的函数来允许柯里化。无论如何,这与实际问题有点相切,但如果我只是以我的问题的精神可怕地屠杀 FP,请随时在评论中解决这个问题。

0 投票
2 回答
473 浏览

function - `[a -> a] -> (a -> a)` 最惯用的实现

如果我有一个函数列表,每种类型都a -> a对应某种类型,那么组合它们的最短、优雅和惯用的方法是什么?最好不添加额外的依赖项?

一些变体包括

但出于某种原因,我期待找到更好的东西。

0 投票
1 回答
1986 浏览

haskell - Haskell中的反向函数组合

考虑以下 Haskell 代码:

在 JavaScript 中,这将被写成如下:

如您所见,函数组合与 JavaScript 中的链接方法非常相似。我真的很喜欢链接方法从左到右读取的方式。在 Haskell 中,我可以使用>>>fromControl.Arrow和 reverse 函数应用程序执行类似的操作,如下所示:

现在我想以无点风格编写这个函数。使用函数组合我会写如下:

但是,我想使用反向函数组合以无点样式编写此函数,如下所示:

我的抱怨是我必须:.根据函数组合而不是反向函数组合来定义函数。那是:

当然(>>>) (>>>) (>>>)是错误的类型。这不是我正在寻找的功能。

函数组合的美妙之处在于它可以与自身组合形成“高阶函数组合”,如上所示。因此,尽管它的类型签名直观地是向后的,但它实际上是向前的,这就解释了为什么f . g = \x -> f (g x)而不是f . g = \x -> g (f x).

这让我想到了我的实际问题:有没有办法根据反向函数组合(即)定义“高阶反向函数组合”>>>而不是flip相应的“高阶函数组合”?

我正在寻找一个源于范畴论或其他数学分支的答案。

0 投票
2 回答
4975 浏览

haskell - 什么是 (f .) 。g 在 Haskell 中是什么意思?

我已经看到根据模式定义了很多功能(f .) . g。例如:

这是什么意思?

0 投票
1 回答
17934 浏览

scala - 理解“然后”

我遇到过andThen,但没有正确理解。

为了进一步了解它,我阅读了Function1.andThen文档

mm是一个MultiMap实例。

注意 - 来自DSL 的代码在行动中

andThen强大吗?根据这个例子,它看起来像是mm.andThenx => mm.apply(x). 如果还有更深层次的含义andThen,那我还没有理解。