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

compiler-construction - 测试将结构编译为类函数列表的高阶函数

我有一个这样的地图(可以使用通常的布尔运算符嵌套,使用模块“布尔”和“数据”将包含适当的值,例如“左”、“右”和“运算符”将是“和” , “或不”):

我想要的是一个返回一个列表的函数,该列表可以插入到 (fn [context] ...) 列表中,它将能够针对我们将抛出的内容执行。

给定上面的结构,最终的结果,在被插入到一个函数之后,应该是这样的:

因此,我的解析/编译函数必须只返回 (= ...) 部分。我有一些非常接近的东西:

在我的测试中,这会返回:

注意上下文参数?它已被命名空间,这就是我的测试失败的原因。我确定我可以做某事,但是调用 symbol 会导致符号未定义,这是有道理的,因为该符号尚不存在。

关于 acc 参数:我怀疑我最终会从此函数中删除递归,并使用 acc 进行递归,将我的返回值放到累加器上。不过,这有点远。

0 投票
2 回答
285 浏览

binding - 该程序的输出使用不同的范围/绑定规则和参数传递?

这是我下一次考试的(真的)艰苦的练习。它的目的是为了理解范围、绑定和参数传递规则。我什至无法弄清楚输出的前 3 个数字,这让我发疯。

这个具有动态范围、浅绑定和从左到右的表达式求值的类 C 程序的输出是什么?

0 投票
4 回答
441 浏览

haskell - 为什么 foldl1 无法应用 (==) 运算符?

前奏

foldl1:它获取列表的前两项并将函数应用于它们,然后将这个结果和第三个参数提供给函数,依此类推。

为什么不能写这样的东西?

0 投票
3 回答
3164 浏览

lambda - lambda 是一种高阶函数吗?

我在其中一个职位发布中看到了这个问题,它询问什么是 lambda 函数以及它与高阶函数的关系。我已经知道如何使用 lambda 函数,但不太有信心解释它,所以我做了一点谷歌搜索,发现:什么是 lambda(函数)?和这个http://en.wikipedia.org/wiki/Higher-order_function

HOF 的定义说应该至少采用一个或多个函数或返回一个函数适合 lambda 是什么,所以我的问题是.. lambda 是一种 HOF 吗?

或者谁能​​进一步解释他们的关系?

0 投票
2 回答
12304 浏览

scala - 如何在不首先映射它们的情况下对集合元素的字段求和(如 foldLeft/reduceLeft)?

考虑这个类:

为了得到所有人的年龄总和,我可以编写如下代码:

但是如果我想使用sum,我需要先映射值,代码如下所示:

如何在创建一些中间集合的情况下使用该sum方法?

(我知道这样的“优化”很可能不会在不紧密循环中运行时没有任何真正的性能差异,而且我也知道惰性视图等等。)

是否有可能有类似的代码

做什么foldLeft/做什么reduceLeft

0 投票
3 回答
1649 浏览

list - Erlang:是否可以将最小函数编写为列表折叠?

给定一个函数:

我可以在函数foldl中以与此类似的方式使用它吗?

我相信这是不可能的,因为我必须设置一个将与列表的其余部分进行比较的初始值,例如,没有我能想到的身份函数。我对吗?

语法是用 Erlang 编写的,但非 Erlang 程序员也应该可读。

0 投票
3 回答
11502 浏览

clojure - Clojure 中的高阶函数

Clojure 很棒,我们都知道,但这不是重点。我想知道以类似 Haskell 的方式创建和管理高阶函数的惯用方式是什么。在 Clojure 中,我可以执行以下操作:

(sum 1)不返回函数:它会导致错误。当然,你可以这样做:

在这种情况下:

但这似乎不是正确的方法。有任何想法吗?
我不是在谈论实现该sum功能,而是在更高的抽象层次上谈论。是否有任何惯用的模式可以遵循?一些宏?是定义宏的最佳方法还是有替代解决方案?

0 投票
4 回答
2167 浏览

macros - 为 DSL 使用 Clojure 宏

我正在做一个 Clojure 项目,我经常发现自己为 DSL 编写 Clojure 宏,但我正在观看有关公司如何在实际工作中使用 Clojure 的 Clojure 视频,演讲者说在实际使用中他们不使用宏DSL,它们只使用宏来添加一点语法糖。这是否意味着我应该使用标准函数编写我的 DSL,然后在最后添加一些宏?

更新:在阅读了对这个问题的许多不同(和有趣)的回答后,我意识到答案并不像我最初想象的那样明确,原因有很多:

  1. 应用程序中有许多不同类型的 API(内部、外部)

  2. API 有多种类型的用户(只想快速完成某事的业务用户,Clojure 专家)

  3. 那里有隐藏样板代码的宏吗?

我会离开并更深入地思考这个问题,但感谢您的回答,因为他们给了我很多思考。我还注意到 Paul Graham 的想法与 Christophe 的视频相反,他认为宏应该是代码库的很大一部分(25%):

http://www.paulgraham.com/avg.html

0 投票
2 回答
319 浏览

function - 高阶函数

我无法理解我的讲师希望我从这个问题中做什么。谁能帮我解释一下他想让我做什么?

定义插入排序算法的更高阶版本。那就是定义函数

这一点让我感到困惑: 这样 inssort fl 对列表 l 进行排序,使得元素 x 出现在 elementyif fx < f y 之前。

0 投票
2 回答
702 浏览

generics - 高阶多态性 + 值类型

我在某处读到高阶多态性不能在具有值类型的类型系统(如.NET)中使用/实现。对吗?为什么?