2013-08-30 12 views
5

Per provare Netwire, sto implementando Pong utilizzando la libreria. Nel codice ho un cavo a sfera e un cavo a paddle per computer, e dal momento che dipendono l'uno dall'altro per alcuni valori, ho riscontrato problemi con loop infiniti. Alcuni pseudo-codice per spiegare:Netwire fili reciprocamente dipendenti

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

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

La cosa da notare è che prendono l'un l'altro per gli ingressi. Ho cercato di alleviare questo eseguendo le operazioni seguenti:

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

e altre varianti di utilizzare la funzione delay in questi due fili, ma sto ottenendo l'errore <<loop>> runtime indipendentemente.

Come inizializzare uno dei fili in modo che questo sistema possa funzionare?

risposta

6

Ovviamente 5 minuti dopo trovo la combinazione magica che sembra funzionare. Quello che ho fatto è stato ho modificato gli ingressi i fili hanno in essere

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

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

poi quando è venuto a creare la mia rete di fili che ho fatto questo:

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

    returnA -< (b,p) 

Questo acknowlegdes la loro dipendenza, e dà la pagaiare il valore iniziale fittizio della palla al primo passaggio.