问题标签 [higher-order-functions]

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 回答
4658 浏览

javascript - JavaScript reduce 不能处理数学函数?

我正在尝试一个明显的任务:

并得到:

作为结果。为了使它工作,我必须以这种方式创建一个匿名函数:

有人能告诉我为什么吗?两者都是接受两个参数并且都返回一个值的函数。有什么不同?

另一个例子可能是这样的:

结果是:

我只能在这个形状下在 node.js 中运行这个示例(数组在 node.js v4.12 中没有 concat,我现在使用它):

然后得到这个:

那为什么呢?

0 投票
3 回答
697 浏览

haskell - 使用 map、concat 替换 3 参数列表理解

我对列表理解有一些了解。我理解这样的表达:

并且该表达式的效果与以下内容相同:

现在,我必须为以下功能找出另一种方法(就像上面一样):

我自己无法弄清楚没有错误,请帮助我

0 投票
2 回答
233 浏览

string - 'Map' 高阶 Haskell 函数

我有一个清单,例如:

我想map在列表中使用;

我之前成功使用map过:

那么:

将列出:

但是如何使用函数中的列表项f

例如,如果我想重复列表元素,那么

会成为

我怎样才能用map一个函数f(和++)来做到这一点?

0 投票
2 回答
473 浏览

collections - 集合上的高阶函数是否保证按顺序执行?

在另一个问题中,一位用户建议编写如下代码:

在其他语言中,这样的代码被认为是不好的做法,因为 collect 的内容会改变其上下文的状态(这里它会改变 的值i)。换句话说,闭包有副作用。

这样的高阶函数应该能够并行运行闭包,并再次将其组装到一个新列表中。如果闭包中的处理是长时间的、CPU 密集型操作,则可能值得在单独的线程中执行它们。collect更改为使用 anExecutorCompletionService来实现这一点很容易,但它会破坏上面的代码。

另一个问题的例子是,如果出于某种原因,collect以相反的顺序浏览集合,在这种情况下,结果将是[3, 2, 1, 0]. 请注意,在这种情况下,列表没有被还原,0 实际上是对 'd' 应用闭包的结果!

有趣的是,这些函数记录在Collection 的 JavaDoc中的“迭代此集合”中,这表明迭代是顺序的。

groovy 规范是否明确定义了高阶函数(如collectoreach )中的执行顺序?上面的代码是坏了,还是没问题?

0 投票
2 回答
227 浏览

f# - 在 F# 中包装具有不确定数量参数的函数

我正在尝试在 F# 中编写一个简单的包装类,它接受一个返回字符串的函数,并返回一个接受相同参数并从输入“包装”返回字符串的函数。

以下代码适用于采用单个变量的函数(因此test可以正常工作):

但是因为fun x ->指定了单个参数,test2是无效的代码。是否有一种语法允许这种结构?

0 投票
1 回答
6005 浏览

sml - 什么是 ML 中的高阶函数中的 curry 和 uncurry

我了解 compose 函数,但不太了解 ML 中的 curry 和 uncurry。谁能解释这些?

另外,以下两行是什么意思?

0 投票
4 回答
734 浏览

php - 如何在 PHP 中使用 array_filter() 进行函数式编程?

假设我有一组标签

我想创建一组带有 $_GET 变量的 URL。
我希望链接是:
'A'链接到"index.php?x[]=B&x[]=C"
'B'链接到"index.php?x[]=A&x[]=C"
等($_GET 是一个包含除“当前”元素之外的所有元素的数组)(我知道有一种更简单的方法来实现这个:我实际上是在简化一个更复杂的情况)

我想用它array_filter()来解决这个问题。
这是我的尝试:

但它不起作用。我怀疑这可能与 PHP 中的映射和过滤器如何实际改变数据结构本身并返回一个布尔值有关,而不是使用函数式样式,它们不会改变并返回一个新列表。

我也对其他使代码更简洁的方法感兴趣。

0 投票
4 回答
1098 浏览

java - Java MethodHandles 可以被认为与第一类函数相同吗?

Java方法类和 Java 7 的MethodHandle类都指与方法相关联的对象,但它们仍然很少使用,当需要将函数传递给另一个函数时,最好使用实现包含一个接口的匿名类方法。

(注意:MethodHandles 应该比旧的方法更快。)

为什么不经常使用这些构造来将函数传递给函数?是因为它们仍然很冗长吗?

代码示例:

更新

在进行了一些基准测试后,我注意到 MethodHandle 比 Reflection 的方法快,但仍远不及常规方法调用。也许对于方法调用,JVM 可以应用一些句柄无法实现的优化。

0 投票
2 回答
464 浏览

haskell - 自动和确定性地测试一个函数的关联性、交换性等

是否可以构造一个高阶函数isAssociative,它接受另一个有两个参数的函数并确定该函数是否是关联的?

类似的问题,但也适用于其他属性,例如交换性。

如果这是不可能的,有没有办法用任何语言自动化它?如果有我感兴趣的 Agda、Coq 或 Prolog 解决方案。

我可以设想一个蛮力解决方案,它检查每个可能的参数组合并且永不终止。但是在这种情况下,“永不终止”是一个不受欢迎的属性。

0 投票
1 回答
261 浏览

scala - 将列表转换为元素的映射 - > scala中的列表(元素)

我有一个文档列表,其中文档的所有者是用户。

将此列表转换为用户映射到他们拥有的文档列表的最优雅的方法是什么?

所以例如我有:

我最终应该得到一张地图:

我可以想到一种方法是从文档中获取所有唯一用户,并为每个用户过滤文档列表以使其成为他们拥有的用户,但我想知道是否有一种方法可以使用固定数量的通行证如果列表很大,则通过列表防止任何性能问题。