问题标签 [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.
perl - Perl 中的哈希映射
是否有等效的哈希map
?
我知道我可以遍历这些键。
scala - 使用多个参数列表调用 Scala 构造函数
在 Scala 中,我可以创建一个采用多个参数列表的方法:
并这样称呼它:
如何使用类构造函数做同样的事情?我怎么称呼它?
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这对我来说绝对没有意义。
function - 高阶函数有哪些有趣的用途?
我目前正在上一门函数式编程课程,我对高阶函数和作为一等公民的函数的概念感到非常有趣。然而,我还想不出许多实际有用的、概念上令人惊叹的,或者只是简单有趣的高阶函数。(除了典型且相当乏味map
的 ,filter
等功能)。
你知道这些有趣功能的例子吗?
也许返回函数的函数,返回函数列表的函数(?)等。
我很欣赏 Haskell 中的示例,这是我目前正在学习的语言 :)
arrays - 为什么 map/filter ... 不适用于 Array of Nothing?
Nothing 不是所有类型的子类型吗?
奇怪的是,这不起作用。
这是指定的,功能还是错误?
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#。
scala - Scala 中的隐式转换和高阶应用方法的问题
我正在尝试String
使用一种新的 apply 方法进行扩展,该方法让我可以在其上应用高阶函数。例子:
所以我已经定义了一个从 String 到带有一个List[String] => List[String]
函数的 apply 方法的隐式转换。
但是当我尝试使用它时,转换与 Predef 中转换String
为StringOps
.
为什么它寻找一个通用的应用方法(required: ?{val apply: ?}
)而不是一个接受我的类型的参数(List[String] => List[String]
)?
编辑:
我通过避免使用裸字符串来表达变量来解决这个问题(在我正在研究github的项目中)。所以现在它看起来像这样:
而且我不需要使用隐式。
进一步更新
似乎scala在搜索时确实在implicits的结果类型中寻找类型参数。我让它工作,但函数参数和应用方法的场景不起作用。怎么来的?
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 函数。
我现在拥有的是以下内容(如果您问我的编译器,这似乎是非常错误的!):
我真的很感激这个问题的一些帮助,也许是一个非常简短的评论,可以对foldl
andfoldr
功能有所了解!
clojure - 调用 Clojure 高阶函数
如果我定义一个返回这样的函数的函数:
然后我可以将结果分配给一个符号:
并称之为:
如何调用结果(add-n 1)
而不将其分配给新符号?以下产生此输出:
是对生成函数的#<user$add_n$fn__33 user$add_n$fn__33@e9ac0f5>
内部引用。
clojure - 用于封装的 Clojure 对象和高阶函数
这是我之前的问题的后续。
我从阅读Let Over Lambda中想出了一个奇怪的对象方案,并且认为没有协议的优势,但想获得意见。我只是在探索使用高阶函数和封装。
我可以像这样使用对象:
并以这种方式检索访问器方法:
但我不知道如何调用访问器。
创建的对象是线程安全的,因为“实例”变量的所有突变都发生在 STM 中。
更新:新的和改进的版本: