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

perl - Perl 中的哈希映射

是否有等效的哈希map

我知道我可以遍历这些键。

0 投票
1 回答
954 浏览

scala - 使用多个参数列表调用 Scala 构造函数

在 Scala 中,我可以创建一个采用多个参数列表的方法:

并这样称呼它:

如何使用类构造函数做同样的事情?我怎么称呼它?

0 投票
5 回答
6054 浏览

java - 如何在 java 中编写 map 或 reduce 之类的高阶函数?

我在 Joel On Software 上阅读了一篇关于使用高阶函数通过使用 map 和 reduce 来大大简化代码的想法。他提到这在 Java 中很难做到。文章:http ://www.joelonsoftware.com/items/2006/08/01.html

下面文章中的示例循环遍历一个数组,并使用作为参数传递给数组中每个元素的函数 fn:

这将在实践中类似于以下调用:

理想情况下,我想编写一个映射函数来处理数组或任何类型的集合(如果可能)。

我一直在互联网上四处寻找,我很难找到有关该主题的资源。首先,java中可以使用匿名函数吗?这有可能以另一种方式做到吗?它会在 Java 的未来版本中提供吗?如果可能的话,我该怎么做?

我想如果这在 Java 中是不可能的,那么人们使用某种“模式”/技术来实现相同的效果,因为我认为匿名函数是软件世界中一个非常强大的工具。我能找到的唯一类似的问题是:Java generics - implementation high order functions like map这对我来说绝对没有意义。

0 投票
14 回答
6094 浏览

function - 高阶函数有哪些有趣的用途?

我目前正在上一门函数式编程课程,我对高阶函数和作为一等公民的函数的概念感到非常有趣。然而,我还想不出许多实际有用的、概念上令人惊叹的,或者只是简单有趣的高阶函数。(除了典型且相当乏味map的 ,filter等功能)。

你知道这些有趣功能的例子吗?

也许返回函数的函数,返回函数列表的函数(?)等。

我很欣赏 Haskell 中的示例,这是我目前正在学习的语言 :)

0 投票
3 回答
2966 浏览

arrays - 为什么 map/filter ... 不适用于 Array of Nothing?

Nothing 不是所有类型的子类型吗?

奇怪的是,这不起作用。

这是指定的,功能还是错误?

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 投票
3 回答
727 浏览

scala - Scala 中的隐式转换和高阶应用方法的问题

我正在尝试String使用一种新的 apply 方法进行扩展,该方法让我可以在其上应用高阶函数。例子:

所以我已经定义了一个从 String 到带有一个List[String] => List[String]函数的 apply 方法的隐式转换。

但是当我尝试使用它时,转换与 Predef 中转换StringStringOps.

为什么它寻找一个通用的应用方法(required: ?{val apply: ?})而不是一个接受我的类型的参数(List[String] => List[String])?

编辑:

我通过避免使用裸字符串来表达变量来解决这个问题(在我正在研究github的项目中)。所以现在它看起来像这样:

而且我不需要使用隐式。

进一步更新

似乎scala在搜索时确实在implicits的结果类型中寻找类型参数。我让它工作,但函数参数和应用方法的场景不起作用。怎么来的?

0 投票
2 回答
10668 浏览

functional-programming - 如何在有条件的列表上进行添加?

我有一门关于函数式编程的大学课程,我在其中使用 SML。作为考试的准备工作,我正在研究一些没有解决方案的旧考试集。

我真正遇到的唯一问题之一是使用以下问题foldl

考虑程序框架: fun addGt k xs = List.foldl (...) ... xs; 将缺失的两个部分补上(用点...表示),使得 addGt k xs 是 xs 中大于 k 的那些元素的总和。例如,addGt 4 [1, 5, 2, 7, 4, 8] = 5 + 7 + 8 = 20

我确信这真的很容易,但我很难理解 foldl 和 foldr 函数。

我现在拥有的是以下内容(如果您问我的编译器,这似乎是非常错误的!):

我真的很感激这个问题的一些帮助,也许是一个非常简短的评论,可以对foldlandfoldr功能有所了解!

0 投票
1 回答
1026 浏览

clojure - 调用 Clojure 高阶函数

如果我定义一个返回这样的函数的函数:

然后我可以将结果分配给一个符号:

并称之为:

如何调用结果(add-n 1)而不将其分配给新符号?以下产生此输出:

是对生成函数的#<user$add_n$fn__33 user$add_n$fn__33@e9ac0f5>内部引用。

0 投票
3 回答
501 浏览

clojure - 用于封装的 Clojure 对象和高阶函数

这是我之前的问题的后续。

我从阅读Let Over Lambda中想出了一个奇怪的对象方案,并且认为没有协议的优势,但想获得意见。我只是在探索使用高阶函数和封装。

我可以像这样使用对象:

并以这种方式检索访问器方法:

但我不知道如何调用访问器。

创建的对象是线程安全的,因为“实例”变量的所有突变都发生在 STM 中。

更新:新的和改进的版本: