问题标签 [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.
frp - 字符上的模式匹配
我对 Elm 很陌生(elm-server 0.9.2),我遇到了一个对我来说已经成为障碍的问题。
这是我的问题:
根据version-0.9文档,我应该能够编写:
所以为了测试这个我基本上做了我自己的功能(非常相似:)):
但是它们的展位失败了,经过一些调试后,我在 javascript 中注意到了这一点:
我对 javascript 了解不多,但似乎 Chr '\n' 应该是 Chr('\n'),我可能错了...有人可以在这里指出我正确的方向,因为我迷路了...
haskell - 过滤反应香蕉中的重复事件
假设我有
我可以得到它的第一个组件:
但是,即使第一个组件没有更改,此事件也会触发。我想避免这种情况,因为它会引发昂贵的重新计算。
A
是 的一个实例Eq
,因此我希望能够删除第一个组件与其最后一个值相比未更改的连续事件。
理想情况下,我想要一个功能
这将在不诉诸Moment
单子的情况下做到这一点。可能吗?或者最好的方法是什么?
scala - Scala React 的简单示例
基于论文Deprecating the Observer Pattern with Scala.React我试图从论文中设置一个简单的例子,但它抛出了一个异常Exception in thread "main" java.lang.AssertionError: assertion failed: This method must be run on its domain scala.react.NilDebug@1502c065
一个相关的问题是运行一个简单的 Scala.React 表达式。
如何设置一切以使用 scala react 库的强大功能?
除了库scala-react之外,我还使用了以下示例:
haskell - 在 Yampa 中模拟弹簧/阻尼器系统
我正在尝试使用 Yampa 进行一些基本的系统仿真,就像我在 Simulink 中所做的那样。在这种情况下,我想模拟这个 simulink 教程介绍的弹簧和阻尼器系统。我编写了以下信号函数来表示系统:
该feedback
函数创建一个基本的反馈循环并实现如下:
哦,还有:
有了合理的正常数,我得到了一个非常不稳定的系统:
我构建反馈循环或应用集成的方式是否存在明显错误?
javascript - 如何处理未使用的flajax EventStreams
我想创建一个事件流,只要用户触摸并移动他的手指一些像素,它就会触发事件。事件应包含用户移动了多少的相对 x 和 y 值。以下代码正确执行此操作:
但是如果我们通过添加一些日志来修改它:
我们将看到所有过去的 touchmove EventStreams 仍然对每个 touchmove 事件进行评估,尽管被 switchE 方法删除,它只为结果事件选择最新的 EventStream。这些是否有任何方法可以避免这种懒惰评估的巨大泄漏?
objective-c - ReactiveCocoa 中的缓存失效
总的来说,我仍然在研究 RAC 和 FRP——目前正在努力弄清楚如何实现我通常不得不在其他地方使用的模式。
假设我正在制作一个抽认卡应用程序,主屏幕是我的卡片组列表。这个应用程序使用网络服务器的状态作为事实来源。我不想每次显示屏幕时都从服务器重新获取此卡组列表 - 太好了,我可以在带有重播主题的多播信号中使用延迟网络请求来有效地记忆该列表。
我有两种方法可以通过从服务器重新获取来刷新此列表,这对我来说很复杂。我希望能够在应用程序中发生任何数量的事情时使这个“缓存”列表无效(例如,用户导航到其他屏幕并执行会使主屏幕上的牌组列表过时的操作,或者应用程序刚刚被重新唤醒,所以我们可以猜测它可能已经过时了),所以下次用户返回到这个主屏幕时,它一开始不会显示任何内容(而不是显示旧列表,因为它知道它是由于用户的操作而过期)并将重新获取列表,并在下载后显示它。我怎样才能最优雅地处理这种“无效”状态(希望没有实际状态)?
我还希望能够在超时时使“缓存”列表过期 - 基本上,甲板列表信号会给出缓存列表,直到足够的时间过去,此时它会在提供数据之前懒惰地发出网络请求。
我对如何实现这两件事有一些想法,但它们似乎有点令人费解。很想得到一些指导或被指出一些示例项目的方向。
我可以看到处理此问题的一种简单方法是拥有一个命令式服务层,并命令式处理缓存和缓存失效,并使用广播事件使缓存无效,然后从缓存返回或产生网络请求以填充缓存反应层尝试访问数据。如果不首先了解这样做的反应方式,我宁愿不遵循这种方法。
谢谢!
haskell - 反应香蕉时间延迟
我已经搜索了reactive-banana的文档,但我找不到指定明确时间延迟的方法。比如说,我想将Event t a
它的所有出现转移到未来 1 秒;或获取从现在开始 1 秒后触发的事件(在 内Moment t
);或类似的东西。反应性香蕉中是否可以表示显式延迟?如果不是,用户如何实现,例如延迟一秒回显输入?
haskell - 箭头 FRP 中的连续信号切换
我一直在使用 Haskell(尤其是 Yampa)中的 Arrowized FRP 库,但我不太清楚如何进行“连续”切换。我的意思是信号通过一个信号函数(sf
下图),该函数本身就是一个信号(如图上半部分所示)。
由于我不提前知道开关的参数是什么,所以我看不出如何将其简化为更简单的二进制开关。
如果可能的话,应该怎么做呢?我更喜欢 Yampa 代码,但对任何带箭头的 FRP 代码都很满意。我还没有尝试过其他库(例如 Sodium 或 Reactive Banana)来知道在这些情况下我是否会有同样的困惑,但我也对它们很好奇。
编辑
为了使这一点更清晰更具体,我已标记了图像;标签的可能类型有:
在:
Either Int (Int -> Int)
1:
(Int -> Int) -> (Either Int (Int -> Int) -> (Int -> Int))
sf 可以是:
(Either Int (Int -> Int) -> (Int -> Int)) -> Either Int (Int -> Int) -> (Int -> Int)
(例如,app
)。但这仅是当标有问号的部分表示对sf
. 如果它表示更复杂的开关,则类型为
(Either Int (Int -> Int) -> (Int -> Int)) -> (Int -> Int)
反而。
- 2和out几乎无关紧要。
这个想法是我希望电路表现得好像 sf
是app
,标记的信号f
表示应用于 的函数in
,并且它本身是s 和s 本身in
的参数的来源。我想得到一个可以处理输入并根据这些输入动态改变其行为(构成它的信号函数)的电路。f
f
一方面,在我看来sf
,实际上不可能app
,因为在这种情况下,我们没有ArrowApply
; 但另一方面,我想通过某种形式的复杂切换可以实现相同的行为。
haskell - Qt 的 QStateMachine 的功能反应模拟
QStateMachine框架提供了一种很好的声明方式来定义基于有状态事件的应用程序。即,然后发生一个事件,它执行一个回调(实际上它触发一个信号,但这还不够)并根据图表执行状态转换。
我对 FRP 没有任何实际经验,但是通过浏览 reactive-banana 的示例,我没有发现 FRP 是否可以解决类似的问题。例如,“两个计数器”示例通过普通if和accumB处理状态。
那么有没有一种干净且声明性的方式来融合 FSA 和 FRP?
haskell - 未反映钠事件更新
所以我试图了解 Sodium 的函数式反应式编程模型是如何工作的,但我遇到了一些障碍。我有一个数字列表,我正在使用类似“时间”的值进行更新,并且在传入空格字符时将其添加到此列表中。运行它的引擎如下。
因此,我正在打印游戏行为给出的每个“滴答”的当前值。这是游戏行为的代码。
我希望这样做是在输入每个空格字符时,将 a0
注入列表中。实际上,每次按下 enter 时,我希望列表中的所有数字都增加一。相反,只有在我按下空格后,数字才会增加。有谁知道我要去哪里错了?