2013-08-30 12 views
5

Um Netwire auszuprobieren, implementiere ich Pong mit der Bibliothek. Im Code habe ich einen Balldraht und einen Computer Paddel-Draht, und da sie für einige Werte voneinander abhängig sind, bin ich auf Probleme mit Endlosschleifen gestoßen. Einige Pseudo-Code zu erklären:Netwire voneinander abhängige Drähte

Die Sache zu beachten ist, sie nehmen sich gegenseitig für Eingaben. Ich habe versucht, dies, indem Sie die folgenden zu lindern:

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

und andere Variationen der Verwendung der delay Funktion in diesen beiden Drähte, aber ich bin immer die <<loop>> Laufzeitfehler unabhängig.

Wie initialisiere ich einen der Drähte, damit dieses System funktionieren kann?

Antwort

6

Natürlich finde ich 5 Minuten später die magische Kombination, die zu funktionieren scheint. Was ich tat, war ich die Eingänge verändert die Drähte in nahm

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

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

dann sein, wenn es um die Schaffung mein Netzwerk von Drähten kam ich dies tat:

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

    returnA -< (b,p) 

Diese ihre Abhängigkeit acknowlegdes und gibt die paddle den Dummy-Startwert für den Ball im ersten Durchgang.