2013-08-30 31 views
5

Để thử Netwire, tôi đang triển khai Pong bằng thư viện. Trong mã tôi có một dây bóng và một dây chèo máy tính, và kể từ khi họ phụ thuộc vào nhau cho một số giá trị tôi đã chạy vào các vấn đề với vòng vô hạn. Một số mã giả để giải thích:Netwire dây phụ thuộc lẫn nhau

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

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

Điều cần chú ý là chúng lấy nhau cho đầu vào. Tôi đã cố gắng để giảm bớt này bằng cách thực hiện những điều sau đây:

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

và các biến thể khác của việc sử dụng các chức năng trong delay hai dây này, nhưng tôi nhận ra lỗi runtime <<loop>> không phân biệt.

Làm cách nào để khởi tạo một trong các dây để hệ thống này có thể hoạt động?

Trả lời

6

Tất nhiên 5 phút sau, tôi tìm thấy sự kết hợp ma thuật có vẻ hoạt động. Những gì tôi đã làm là tôi thay đổi các yếu tố đầu dây mất trong là

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

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

sau đó khi nó đến để tạo ra mạng của tôi dây Tôi đã làm điều này:

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

    returnA -< (b,p) 

này acknowlegdes sự phụ thuộc của họ, và cung cấp cho các paddle giá trị ban đầu giả cho bóng trên nó vượt qua đầu tiên.

Các vấn đề liên quan