2013-08-30 151 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的依賴,並給出了第一遍爲球打出虛擬初始值。