2013-08-30 2 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 = ... 

을 할 전선에 걸린 입력을 변경 :이 자신의 의존성을 acknowlegdes

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

    returnA -< (b,p) 

을하고 있습니다 첫 번째 패스에서 볼의 더미 초기 값을 패들링합니다.