问题标签 [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.
haskell - Haskell高阶函数计算长度
我不明白这里发生了什么?有人可以解释一下这段代码吗?这个函数如何计算长度?
为什么它使用 lambda、下划线、下划线和 n 之间的空格以及右侧的零?
haskell - Haskell 中的行多态性:用“转换”编写 Forth DSL 的麻烦
最近 Haskell 博客活动1启发了我,尝试在 Haskell 中编写类似 Forth 的 DSL。我采用的方法既简单又令人困惑:
对于做简单的事情,这非常有效:
简单的函数可以很容易地转换为相应的堆栈转换。到目前为止,一些游戏产生了令人愉快的结果:
当我尝试用高阶函数扩展它时,麻烦就来了。
call
应该通过基本上将转换(保持在堆栈的顶端)“应用”到它的“其余部分”(s :> (s :~> s'))
来将 form的堆栈转换为 form 。s
我想它应该像这样工作:
但实际上,它给了我一个巨大的类型不匹配错误。我究竟做错了什么?“堆栈转换”表示可以充分处理高阶函数,还是我需要调整它?
1注 与这些人的做法不同start push 1 push 2 add end
,我希望它是,而不是 ,我runF $ start (push 1) (push 2) add
的想法是也许以后我可以使用一些类型类魔法来使push
某些文字隐含。
higher-order-functions - 是否有返回其参数的位置扩展版本的函数的名称?
splatter
在此 Python 代码中考虑:
在 n 个压缩序列上映射一个 n 元函数似乎是一个足够常见的操作,可能已经有一个名称,但我不知道在哪里可以找到它。它模糊地唤起了柯里化,似乎还有其他相关的以争论为中心的 HOF,我从未听说过。有谁知道这是否是“众所周知”的功能?在讨论它时,我目前被问题标题中使用的尴尬语言所困扰。
编辑
哇,Pythonmap
会自动执行此操作。你可以写:
它会做正确的事,为您省去splatter
编写函数的麻烦。唯一的区别是zip
返回一个列表,其长度是其最短参数的长度,而map
用 .extends 扩展较短的列表None
。
java - Scala 高阶函数与提供的示例之间的逐步连接
我很难弄清楚如何从 Scala 高阶函数定义跳转到提供的示例。它在幻灯片81上的幻灯片中提供。
这是高阶函数定义:
以下是提供的示例:
咦?!我在这里缺少一些步骤。我知道这些示例可能同时利用了函数定义和一些 Scala 细节。我只是没有足够的阅读 Scala 和做出连接假设的经验。
我的背景是 Java OO。我现在正在学习 Scala 和函数式编程。这不是我不理解的第一个这样的例子。这只是我觉得我有勇气发帖的第一个,因为我知道我看起来很无知。
我确实试图研究这个。首先,我查阅了 Scala“圣经”、“Scala 2nd Edition 编程”,并试图从那里理解 if(第 165-9 页)。然后,我在 StackOverflow 上进行了搜索。我发现了几个在该地区讨论的链接。但是,没有任何东西真正地一步一步地向我展示了 Scala 高阶函数定义和提供的示例之间的联系,这种联系映射到这张幻灯片中的特定实例。
这是我在 StackOverflow 上找到的:
我现在才意识到我跳过了 Google,直接来到了 StackOverflow。嗯。如果你用谷歌搜索并找到正确的链接,我很乐意看到它。我已经没有时间筛选所有使用猴子单子、胚胚等术语的 Google 链接,同时让我更加困惑并且不太可能尝试解决这个问题。
python - 使用 Boost::Python 进行高阶编程
所以,我有一个简单的事件库,用 C++ 编写并使用 Boost 库。我想把这个库暴露给 Python,所以我自然而然地转向了 Boost::Python。最终,我得到了要编译的代码,但现在我面临着一个相当大的问题:我的库使用了高阶编程技术。例如,该库由三个主要类组成:事件类、事件管理器类和事件侦听器类。事件侦听器类提出了问题。代码:
如您所见,功能setResponse
是问题所在。它需要一个函数传递给它,不幸的是,Boost::Python 在这种情况下没有应用它的转换器魔法。当调用如下:
它给出了这个错误:
所以,我的问题是,我该如何解决这个问题?它必须使用重载或包装器,因为我希望该库仍可被 C++ 调用。
struct - GLSL 中的二阶函数?
我正在寻找一种将函数用作 GLSL 中另一个函数的参数的方法。在常规 C 中,可以通过将函数指针作为函数参数传递来模拟它。似乎其他语言(如 HLSL)现在也提供了处理高级构造(如高阶函数)的方法,或者可以巧妙地使用 HLSL 结构来模拟它们。不幸的是,我现在被 GLSL 困住了,我找不到任何方法来模拟高阶函数。当前(4.2)GLSL真的不可能吗?还是我错过了一些聪明的把戏?
我正在努力实现的常见示例:
f# - 是否有用于将操作传递到最内部结构的操作员的 FP 名称?(类似于 fsharp 中的 |> 运算符)
我必须编写 2 个运算符:
为了进行以下操作,第一组将 Seq 转换为 Map,第二组将键添加到集合
这两个运算符 |/> 和 ||> 有什么特殊名称吗?
这将帮助我找到其他这样的运营商,而不是重新发明轮子
编辑
它对于取消分组也很有用
function - 如何创建返回函数的 Haskell 函数?
我想创建三个 Haskell 函数:a
、b
和c
。
每个函数都有一个参数。参数是三个函数之一。
我希望函数a
具有这种行为:
- 如果参数是函数
a
,则返回函数a
。 - 如果参数是函数 b 则返回函数
b
。 - 如果参数是函数 c 则返回函数
a
。
以下是我对功能期望的行为的回顾a
:
这是我希望其他两个功能的行为:
创建后,我希望能够以各种方式组合函数,例如:
如何创建这些功能?
dictionary - 在 f# Map<'a,Map<'b,'T>>) -> Map<'b,Map<'a,'T>> 中反转嵌套字典
我有一个嵌套字典Map<'a,Map<'b,'T>>
,因此对于 的组合a*b
,条目是唯一的。
为了有效地进行预计算,我需要在Map<'b,Map<'a,'T>>
我有一些更高阶的方法可以完成这项工作(|/>
将在嵌套序列|//>
中应用相同的操作,但深度为 2 层,|*>
将枚举嵌套序列的笛卡尔积),但我想知道是否有更好的方法来做到这一点,以防万一有漂亮的代码可以分享。
c# - 在高阶函数中使用空合并运算符
我想弄清楚这是否可能。我的预感是它不是但想确认。
以下高阶函数使用空合并运算符:
目标是在这样的属性中使用它:
如果它按预期工作,则 GetSomeMember() 函数只会在第一次调用该属性时调用一次。此后,可以返回存储的属性实例。(它的基本记忆/空合并概念)。
现在棘手的部分是尝试将存储的实例捕获在闭包中,而不是选择使用私有字段。我知道您可以将“SomeMember”的状态存储在包含 SomeMember 的类中,但出于好奇,我明确地试图避免这种情况。目标是所有需要保留在 get { } 块中的东西(包括不存储从 Coalesce() 返回的委托)。
由于每次访问属性时都会调用内部返回函数和外部函数,因此存在问题。'T local' 变量每次都被重新分配,因此 null 合并运算符总是重新调用 GetSomeMember()。
想法?