问题标签 [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.
compiler-construction - 测试将结构编译为类函数列表的高阶函数
我有一个这样的地图(可以使用通常的布尔运算符嵌套,使用模块“布尔”和“数据”将包含适当的值,例如“左”、“右”和“运算符”将是“和” , “或不”):
我想要的是一个返回一个列表的函数,该列表可以插入到 (fn [context] ...) 列表中,它将能够针对我们将抛出的内容执行。
给定上面的结构,最终的结果,在被插入到一个函数之后,应该是这样的:
因此,我的解析/编译函数必须只返回 (= ...) 部分。我有一些非常接近的东西:
在我的测试中,这会返回:
注意上下文参数?它已被命名空间,这就是我的测试失败的原因。我确定我可以做某事,但是调用 symbol 会导致符号未定义,这是有道理的,因为该符号尚不存在。
关于 acc 参数:我怀疑我最终会从此函数中删除递归,并使用 acc 进行递归,将我的返回值放到累加器上。不过,这有点远。
binding - 该程序的输出使用不同的范围/绑定规则和参数传递?
这是我下一次考试的(真的)艰苦的练习。它的目的是为了理解范围、绑定和参数传递规则。我什至无法弄清楚输出的前 3 个数字,这让我发疯。
这个具有动态范围、浅绑定和从左到右的表达式求值的类 C 程序的输出是什么?
haskell - 为什么 foldl1 无法应用 (==) 运算符?
从前奏:
foldl1:它获取列表的前两项并将函数应用于它们,然后将这个结果和第三个参数提供给函数,依此类推。
为什么不能写这样的东西?
lambda - lambda 是一种高阶函数吗?
我在其中一个职位发布中看到了这个问题,它询问什么是 lambda 函数以及它与高阶函数的关系。我已经知道如何使用 lambda 函数,但不太有信心解释它,所以我做了一点谷歌搜索,发现:什么是 lambda(函数)?和这个http://en.wikipedia.org/wiki/Higher-order_function
HOF 的定义说应该至少采用一个或多个函数或返回一个函数适合 lambda 是什么,所以我的问题是.. lambda 是一种 HOF 吗?
或者谁能进一步解释他们的关系?
scala - 如何在不首先映射它们的情况下对集合元素的字段求和(如 foldLeft/reduceLeft)?
考虑这个类:
为了得到所有人的年龄总和,我可以编写如下代码:
但是如果我想使用sum
,我需要先映射值,代码如下所示:
如何在不创建一些中间集合的情况下使用该sum
方法?
(我知道这样的“优化”很可能不会在不紧密循环中运行时没有任何真正的性能差异,而且我也知道惰性视图等等。)
是否有可能有类似的代码
做什么foldLeft
/做什么reduceLeft
?
list - Erlang:是否可以将最小函数编写为列表折叠?
给定一个函数:
我可以在函数foldl
中以与此类似的方式使用它吗?
我相信这是不可能的,因为我必须设置一个将与列表的其余部分进行比较的初始值,例如,没有我能想到的身份函数。我对吗?
语法是用 Erlang 编写的,但非 Erlang 程序员也应该可读。
clojure - Clojure 中的高阶函数
Clojure 很棒,我们都知道,但这不是重点。我想知道以类似 Haskell 的方式创建和管理高阶函数的惯用方式是什么。在 Clojure 中,我可以执行以下操作:
但(sum 1)
不返回函数:它会导致错误。当然,你可以这样做:
在这种情况下:
但这似乎不是正确的方法。有任何想法吗?
我不是在谈论实现该sum
功能,而是在更高的抽象层次上谈论。是否有任何惯用的模式可以遵循?一些宏?是定义宏的最佳方法还是有替代解决方案?
macros - 为 DSL 使用 Clojure 宏
我正在做一个 Clojure 项目,我经常发现自己为 DSL 编写 Clojure 宏,但我正在观看有关公司如何在实际工作中使用 Clojure 的 Clojure 视频,演讲者说在实际使用中他们不使用宏DSL,它们只使用宏来添加一点语法糖。这是否意味着我应该使用标准函数编写我的 DSL,然后在最后添加一些宏?
更新:在阅读了对这个问题的许多不同(和有趣)的回答后,我意识到答案并不像我最初想象的那样明确,原因有很多:
应用程序中有许多不同类型的 API(内部、外部)
API 有多种类型的用户(只想快速完成某事的业务用户,Clojure 专家)
那里有隐藏样板代码的宏吗?
我会离开并更深入地思考这个问题,但感谢您的回答,因为他们给了我很多思考。我还注意到 Paul Graham 的想法与 Christophe 的视频相反,他认为宏应该是代码库的很大一部分(25%):
function - 高阶函数
我无法理解我的讲师希望我从这个问题中做什么。谁能帮我解释一下他想让我做什么?
定义插入排序算法的更高阶版本。那就是定义函数
这一点让我感到困惑: 这样 inssort fl 对列表 l 进行排序,使得元素 x 出现在 elementyif fx < f y 之前。
generics - 高阶多态性 + 值类型
我在某处读到高阶多态性不能在具有值类型的类型系统(如.NET)中使用/实现。对吗?为什么?