问题标签 [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.

0 投票
2 回答
301 浏览

haskell - 防止 Yampa/Animas 中的无限循环与 SF 相互依赖

我试图了解这种函数式反应式编程是如何工作的,但我遇到了一个问题。我正在尝试创建一个boid 模拟,但我开始的速度很慢,我现在已经将一个 boid 定义为一个函数,它采用一个起始位置并创建一个从一个位置到一个位置的信号函数,其中输入是点它正在移动,输出是当前位置:

seek 函数需要两个输入(因为循环)。当前位置和目标位置。然后它只是创建一个从当前位置指向目标位置的向量,其大小为 50,即速度。然后对速度进行积分并添加起始位置。最后,信号被一分为二,一个可以成为输出,另一个可以循环回搜索功能。

现在我可以像这样定义 boids:

这里 aBoid 向点 (500, 500) 寻找,而 bBoid 向 aBoid 寻找。

我的问题是,当我希望这两个 boids 互相寻找时。当我这样做时:

该程序只是打印:ProgramName: <<loop>>我认为这意味着它进入了一个无限循环。

我也尝试过使用这样的par功能:

这里route函数只是将每个 boid 的输出映射到另一个 boid 的输入(如zip,但偏移量为 1)

这也给出了<<loop>>信息。

我认为在处理反应式系统时,让对象依赖于彼此的状态应该是一个很常见的问题,所以我希望有一些优雅的解决方案。

我应该补充一点,我发现这个 FRP 东西非常困难并且经常令人困惑,所以我不确定我是否有道理;)

0 投票
1 回答
226 浏览

scala - 事件应该是外部可变的吗?

我正在玩 FRP,想知道应该如何公开处理“发生”事件的行为。我的意思是,程序员应该能够在 FRP 上下文中执行以下操作:

我从来没有在任何 FRP 论文中看到过这样的例子,我觉得这不对。我觉得 FRP 框架应该真正隐藏这种类型的动作,并且事件的发生应该只发生在幕后。我这样想对吗?

澄清一下,我的方法是让“发生”只能由 Event 类本身访问。如果需要对某些外部源(例如鼠标)进行抽象,则可以通过扩展 Event 类来构建。这样,所有处理事件创建的逻辑都被抽象出来了。

0 投票
6 回答
6116 浏览

haskell - Recommended reading/tutorials to understand reactive-banana FRP library

I'm interested in FRP (Functional Reactive Programming) reactive-banana haskell library. What would you recommend reading for a newbie to understand theory behind reactive-banana? As I understand, there have been some progress in this field and different FRP libraries use different approaches, so I don't think that any FRP paper would do.

0 投票
1 回答
80 浏览

programming-languages - 程序员应该可以使用 occs 吗?

在阅读和实现 FRP 时,我occs对 Event 函数的语义感到困惑(在 Conal Elliott 的论文中提到)。处理静态(纯)事件时非常简单,但我不明白它如何处理动态事件(例如鼠标按钮按下等)。例如,如果occs返回事件的所有事件,那么据我所知,occs动态事件的结果可能是以下情况之一(因为并非所有事件都是已知的):

  • 通话时的已知事件
  • 自动与事件本身保持同步的数组/列表

当然,这两个看起来都有些难看——一个破坏了语义纯度,另一个涉及副作用。

简单地删除 FRP 框架本身之外的函数会更好吗occs(即,使其对 Event 和任何扩展它的东西都是私有的)?只要事件具有返回更多事件的映射、过滤、合并等功能,我觉得它可以毫无问题地丢失。或者,我是不是误会了什么?

0 投票
1 回答
805 浏览

haskell - 我们关心 FRP 中的“过去”吗?

在玩弄实施 FRP 时,我发现令人困惑的一件事是如何处理过去?基本上,我的理解是我可以在任何时候使用 Behavior 来做到这一点:

在这样的情况下,这似乎在性能方面可能会出现问题:

在这里我们可以看到,要评估过去的行为,我们需要保留所有事件,并且每次采样时我们最终都会执行(最坏的情况下)线性扫描。

我们是否希望这种能力可用,或者应该只允许一次评估行为 >= 现在?我们甚至想将at函数公开给程序员吗?

0 投票
3 回答
388 浏览

scala - 在 FRP 中实现快照

我在 Scala 中实现了一个 FRP 框架,我似乎遇到了问题。出于某种想法,这个问题我决定限制我的框架的公共接口,因此只能在“现在”中评估行为,即:

这也符合 Conal 在 Fran 论文中的假设,即仅在增加的时间对行为进行评估/采样。它确实限制了 Behaviors 的转换,但除此之外,我们发现自己在代表某些输入的 Behaviors 中存在巨大问题:

使用此行为,评估未来值将是不正确的,评估过去值将需要无限量的内存(必须存储“滑块”事件中使用的所有事件)。

鉴于此限制,我对行为的“快照”操作规范有疑问。我的问题最好用一个例子来解释(使用上面提到的滑块):

我的问题是,如果在执行此代码时发生了“mouseB”事件,那么“步进器”的当前值将是“滑块”的最后一个“样本”(最后一次发生时的值)。如果最后一次发生的时间是过去,那么我们最终将使用过去的时间来评估“滑块”,这违反了上面的规则集(以及您最初的假设)。我可以看到几种解决此问题的方法:

  1. 我们“记录”过去(在事件中保留所有过去发生的事件)允许评估过去时间的行为(使用无限量的内存)
  2. 我们修改“快照”以采用时间参数(“此时间后的样本”)并强制该时间 >= 现在
  3. 在一个更古怪的举动中,我们可以以某种方式将 FRP 对象的创建限制为程序的初始设置,并且仅在此设置完成后才开始处理事件/输入

我也可以简单地不实现'sample'或删除'stepper'/'switcher'(但我真的不想做这两件事)。有人对此有任何想法吗?我在这里误解了什么吗?

0 投票
2 回答
389 浏览

haskell - 将 FRP(尤其是反应香蕉)用于基于回合的 ascii 游戏是否有意义?

我正在考虑类似gnugo的 ascii 界面。我认为轮流是一对共同进化的(允许用户输入的单子)流。这让我隐约想起了管道。

我不太确定如何使用现有的库来做到这一点。

0 投票
2 回答
190 浏览

haskell - 你如何删除反应香蕉中的重复事件

在反应香蕉中,我有一个事件流,它产生一系列数字,其中一些连续重复多次(我不关心所有重复,只是顺序重复)。如何修改该事件流以仅包含非顺序重复项?

我尝试使用更改将其转换为一种行为,认为该行为只会在事件是新数字时“更改”,而是每次收到新的输入事件时行为都会触发更改事件。

0 投票
2 回答
3748 浏览

haskell - 选择哪种 FRP 包?

我刚刚开始研究 Haskell 中的函数响应式编程世界,我想在反应设置中尝试 GUI 编程(使用 gtk,因为大量绑定)。

现在,我一直在研究 Grapefruit、Reactive-Banana 和 Buster,我想要任何关于使用任何一种或其他包装的快乐/恐怖的证明。

我只有这些初步意见:

  • 我不介意自己将 FRP 包绑定到 gtk,因为我对抽象的后端想法(Grapefruit 有)有一种矛盾的感觉。

  • 虽然我发现类型理论很有趣,但我也重视实际程序的简单编码,这似乎让 grapfruit-records 有点偏离..

也就是说,除非你们中的一些人当然说服我不这么想:-)

0 投票
2 回答
283 浏览

haskell - Haskell 的响应式香蕉中响应式网络的 flatMap 的等价物是什么?

我正在寻找响应式香蕉中的函数,该函数将根据另一个事件流或信号的传入值(行为?)从下一个要发出的事件流中进行选择。在 scala 库中,reactive-web 是通过以下方式完成的:

谢谢 !