2013-08-30 205 views
5

要试用Netwire,我使用库实现了Pong。在代码中我有一个球形导线和一个计算机桨形导线,并且由于它们依赖于对方的某些值,所以我一直在遇到无限循环的问题。一些伪代码解释:Netwire互相依赖的线

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>>运行时错误不管。

如何初始化电线之一以便该系统可以工作?

回答

6

当然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) 

这acknowlegdes的依赖,并给出了第一遍为球打出虚拟初始值。