【问题标题】:Multiple Occurrences of an Event at the same Time一个事件同时发生多次
【发布时间】:2019-10-15 10:45:02
【问题描述】:

Conal Elliott 的论文将 Event 定义为

type Event a = [(T , a)] -- for non-decreasing times

这将允许一次多次出现。 在我的 FRP 库中,我想实现该功能:

sample :: Reactive a -> Future () -> Future a

这将在未来触发时对反应进行采样。由于响应式在未来触发时可以具有多个值,我应该如何实现它?始终使用最后一个、第一个或非空列表?

这是示例函数的行为方式:

sample
    (MkReactive "a"
        (MkEvent
            (MkFuture 2
                (MkReactive "b" ...)
            )
        )
    (MkFuture 1 ())
= MkFuture 1 "a"

【问题讨论】:

  • 您的 Reactive & Future 如何与 Conal 定义的 Event & Behavior 相对应?
  • @bergey 我正在使用 Conal 对 Reactive、Event 和 Future 的定义
  • 与近距离投票相反,这个问题不是“主要基于意见的”。无论如何,为了更加清楚,我建议链接到您正在使用的 Conal 的论文。 (看起来像Push-pull functional reactive programming,但我只是猜测。)
  • @duplode:感谢您指出这个问题不是见仁见智的问题,因为有一个精确的规范。

标签: haskell frp


【解决方案1】:

在论文Push-pull functional reactive programming(如果duplode是正确的)中,基本的采样组合器switcher被描述为:

b₀ `switcher` e 的语义选择和采样 b₀ 或在给定采样时间 t

之前来自 e 的最后一个行为

sample 应该以相同的方式与该论文中的组合器兼容。由于Reactive 是具有初始值的Event,而Future 是时间-值对,sample r (MkFuture t ()) 应返回MkFuture t v,其中v 是严格意义上的r 中的最后一个值在t 之前,或者r 的初始值,如果没有这样的值。同时使用多个值没有问题:t 时的任何值都将被忽略,因为它们并非严格在t 之前,而在t 之前的值中,“取最后一个”是明确的。

【讨论】:

  • 你知道这个选择背后的原因吗(使用
  • @2426021684 选择< 而不是<= 对于自反应行为和互反应行为系统在精确采样时具有除底部以外的值(无信息/非终止)至关重要事件发生。
  • @Conal 如何构建一个自我反应的反应或行为?
  • @2426021684 使用谓词事件,即,当随时间变化的布尔值变为真时触发的事件。因此,行为可以对涉及自身的条件(直接或间接)做出反应,导致条件变为错误。
  • 同样的情况发生在以常微分方程 (ODE) 形式的连续设置(无事件)中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
相关资源
最近更新 更多