问题标签 [frp]
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 - Iteratees和FRP之间有什么联系?
在我看来,这两个想法之间有很强的联系。我的猜测是,如果有一种方法可以用 Iteratees 表达任意图,那么 FRP 可以用 Iteratees 来实现。但是 afaik 他们只支持链状结构。
有人可以对此有所了解吗?
haskell - 我应该如何从列表中输出计算值?
我有一个输出列表的长时间运行的计算。我想在计算时从该列表中输出值。什么是一个巧妙的方法来做到这一点?
目前我使用mapM_ print
将每个值打印到 STDOUT。这对于将值打印到命令行的简单情况来说足够好,但感觉有点hacky并且难以使用。
此外,在某些时候,我想将我的命令行输出转换为交互式可视化。我怎样才能将我的列表变成类似 FRP 的事件流?能够将其作为事件源插入现有的 GUI 框架会很棒。
重写函数以使用列表以外的东西是一种选择,尽管允许我按原样获取列表的解决方案是理想的。
events - 与传统 FRP 框架相比,Netwire 中的事件处理
大多数 Haskell FRP 框架(如 AFRP、Yampa 和 Reactive-banana)在连续时变函数和离散函数之间有所区别。通常他们称它们为行为和事件。
一个例外是 Netwire,它使用抑制幺半群来模拟事件。这种方法的优缺点是什么?
特别是,我对 FRP 在机器人控制中的应用很感兴趣。例如,这篇论文http://haskell.cs.yale.edu/?post_type=publication&p=182展示了一种使用事件在 FRP 中对任务和 HSM 抽象进行编码的方法。这可以直接翻译成Netwire吗?
haskell - Haskell 无法从上下文中推断出 (t ~ t1) (Frameworks t)
我正在学习如何使用名为 Reactive Banana 的 Haskell FRP 库,这对 Haskell 来说也是相当新的。目前我正在创建一个将网络作为参数的函数,并在函数体中在编译网络并通过其事件循环之前进行一些初始化,但我遇到问题 Haskell 无法推断出我想要的内容做。
这是代码的简化版本
我得到的确切错误是这个。
搜索互联网使我相信 start 函数中的框架和 setupNetwork 函数中的框架之间的类型不被认为是同一类型。
反正有没有让类型匹配?
haskell - 使用 netwire 进行游戏实体建模
我将使用 netwire 和 OpenGL 在 Haskell 中编写一个实时游戏。基本思想是每个对象将由一根线表示,它会获取一些数据作为输入并输出其状态,然后我会将它们全部连接到一根大线中,以获取 GUI 的状态作为输入并输出世界状态,然后我可以将其传递给渲染器以及一些“全局”逻辑,如碰撞检测。
我不确定的一件事是:我想如何输入电线?并非所有实体都有相同的输入;玩家是唯一可以访问键输入状态的实体,寻找导弹需要目标的位置等。
- 一个想法是让 ObjectInput 类型传递给所有东西,但这对我来说似乎很糟糕,因为我可能会不小心引入我不想要的依赖项。
- 另一方面,我不知道拥有 SeekerWire、PlayerWire、EnemyWire 等是否是个好主意,因为它们几乎“相同”,因此我必须在它们之间复制功能。
我应该怎么办?
haskell - 比 Reactive 更简单的替代库?(哈斯克尔)
我正在学习 Haskell,并尝试编写一些事件驱动的程序。
以下代码来自教程:http ://www.haskell.org/haskellwiki/OpenGLTutorial2
状态存储在IORef
s 中,这使它看起来就像命令式语言。
我听说除此之外还有其他 API Graphics.UI.GLUT
(例如Reactive
),但它看起来非常复杂。
我的方法是 lib 提供一个函数runEventHandler
,用户编写一个handler
接受Event
s 列表并将它们转换为IO ()
.
该main
函数应如下所示:
有这样的库吗?
我目前正在使用多线程实现一个,但我担心它的性能可能很差......
haskell - Reactive-Banana 中的动态事件切换
我目前正在开发一个使用反应香蕉和 SDL 的小游戏。由于目标主要是了解更多关于响应式香蕉和 FRP 的知识,因此我尝试使用动态切换来设置游戏对象的集合,但到目前为止还没有取得多大成功。
在 Bartab 示例中,我发现唯一使用事件切换的示例,最终触发在集合中创建新条目的事件是从事件网络外部获取的,而不是使用内部事件。我的问题是:这是唯一的方法还是只是这个例子的一个特例?
在反应香蕉中是否有更多动态事件切换的例子?
据我了解,我得到了一个 Moment t(Anytime Behavior a),使用 execute 创建一个 Event t(Anytime Behavior a),然后又用于更新携带集合的 Behavior。Moment t (Anytime Behavior a) 是在从触发事件创建的行为上使用 trimB 创建的。如果此触发事件源自事件网络,则不会编译并显示错误消息“无法推断 (t ~ t1)”。我不确定 ~ 到底是什么意思,但它显然会引发错误,因为事件网络的两个框架值 (t) 和这个新的 Moment 值不同。
所以,长话短说,我不明白反应香蕉中的事件切换是如何工作的,我不知道为什么。理论上应该相对简单。
编辑:
我只是尝试从示例中镜像 newEntry / eNewEntry,只是使用正常事件来创建新行为。这会在 spawnPos 中产生“无法推断 (t ~ s)”错误。
编辑2:
它可以工作,但现在在我使用执行创建事件的行上出现了同样的错误。“无法推断出 t ~ t1”
haskell - 反应香蕉中的动态事件切换导致严重泄漏
我不确定这种行为是预期的(即我误用了 Reactive.Banana.Switch)还是一个错误。
假设我有两个类似类型的输入行为,我想根据一个事件在它们之间切换。我写了这个函数:
这段代码似乎无关紧要;当嵌入到简单的 GUI 模型中时,它会进行类型检查、编译并给出所需的结果。(行为的两个文本输入字段,一个发出交替 True 和 False 事件的按钮,以及一个使用 绑定到组合行为的标签sink
。)
然而,在多次触发事件后,很明显某处发生了灾难性的泄漏。应用程序开始花费越来越长的时间来对输入行为的变化和新事件做出反应。它也开始吞噬记忆。
这是带有 -hC 的堆配置文件:
我反复切换事件;两个最大的峰值可能是事件的第 20 次和第 21 次触发。
使用 trimB 感觉有点像挥手让类型相加;我不知道我是否正确使用它或以某种方式滥用它。
我的子问题是:
1) 我是在滥用 Reactive.Banana.Switch API,还是这是一个错误?如果我滥用 API,我做错了什么?
2)我应该在不使用动态事件切换的情况下这样做吗?Usingapply
不会给出正确的行为,因为当底层行为发生变化时,结果事件不会触发。如果我打开事件的所有三个输入,我想我可以设置一个折叠,手动累积每个输入事件的最新值。这是正确的方法吗?
haskell - 具有相同初始值的事件和行为是否存在问题?
我对下面的代码有些不满意。随着我的发展bGameState
,我会添加更多的事件。playerInputE
(我想其他的)共享相同的初始值这一事实会Events
导致问题吗?换句话说,我的初始设计是否足够完善?
此外,是否有替代使用changes
?我认为我符合正确使用的标准,但不确定。
c++ - lambda 及其捕获的值
我最近刚刚对函数式反应式编程及其是什么进行了一些试验,当我试图在 c++ 中实现类似的东西时,我求助于 lambda。我想出了这样的开始,
到目前为止它只支持添加。我试图创建一个称为响应式的对象,它可以环绕任何其他类型,除了在对其执行数学运算时,会创建一个 lambda,在该操作发生的位置,以便记住已经完成的操作之前,并在其中一个影响值发生更改时再次执行此操作(在调用更新函数之后)。例如,如果我要这样做。
那么继承人会发生什么。将第五行中的两个 Reactive 相加将使另一个 Reactive 将它们的两个值添加到 10,并将其影响器设置为执行类似操作的 lambda, &{meh.m_Data + peh.m_Data} 。然后那个 Reactive 将被分配给 cheh。当值 m_meh 添加了 4 并更新了 cheh 时,它的影响器被调用为新值 14,这就是打印到屏幕上的内容,完全符合我的预期。
但后来我开始思考,如果参与 cheh 影响者的那些反应物之一超出范围怎么办。如果处理不当,程序应该会出错。所以我这样做了,
在调用 update 时,在他的影响器中发生的反应性 peh 已经超出范围并且不再存在。然而,这个程序和 cheh 的影响器成功执行,它像以前一样打印出 14。我知道 lambda 中的值是由引用捕获传入的,那么影响函数如何仍然访问对 peh 的引用?只要 lambda 存在,通过引用传递给 lambda 的对象或整数类型是否会强制它们持续存在?有什么腥味...