【问题标题】:Netwire mutually dependant wiresNetwire 相互依赖的电线
【发布时间】:2013-09-02 15:53:31
【问题描述】:

为了试用 Netwire,我正在使用该库实现 Pong。在代码中,我有一根球线和一根电脑桨线,由于它们在某些值上相互依赖,所以我遇到了无限循环的问题。一些伪代码来解释:

ball :: Wire () IO GameInput Ball
ball = (... define ball ...) . pcPaddle

pcPaddle :: Wire () IO GameInput Paddle
pcPaddle = (... define pcPaddle ...) . ball

需要注意的是,它们相互接受输入。我已尝试通过执行以下操作来缓解这种情况:

ball :: Wire () IO GameInput Ball
ball = ( ... ) . delay ( ... base paddle init ...) . pcPaddle

以及在这两条线中使用delay 函数的其他变体,但无论如何我都会收到<<loop>> 运行时错误。

如何初始化其中一根线,以便该系统可以工作?

【问题讨论】:

    标签: haskell frp arrows netwire


    【解决方案1】:

    当然,5 分钟后,我找到了似乎有效的魔法组合。我所做的是将电线输入的输入更改为

    ball :: Wire () IO Paddle Ball
    ball = ...
    
    paddle :: Wire () IO Ball Paddle
    paddle = ...
    

    然后在创建我的电线网络时,我这样做了:

    {-# LANGUAGE DoRec  #-}
    {-# LANGUAGE Arrows #-}
    system = proc g -> do
        rec b <- delay (... ball initial value ...) . ball -< p
            p <- paddle -< b
    
        returnA -< (b,p)
    

    这承认了它们的依赖关系,并在第一次传球时为球拍提供了虚拟初始值。

    【讨论】:

      猜你喜欢
      • 2015-01-19
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 2015-02-15
      • 2013-04-06
      相关资源
      最近更新 更多