5

Netwire を試すために、ライブラリを使用して Pong を実装しています。コードには、ボール ワイヤとコンピュータ パドル ワイヤがあります。それらはいくつかの値で相互に依存しているため、無限ループの問題が発生しています。説明する擬似コード:

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

これらの2つのワイヤで関数を使用する他のバリエーションdelayですが、<<loop>>実行時エラーが発生します。

このシステムが機能するように、ワイヤの 1 つを初期化するにはどうすればよいですか?

4

1 に答える 1

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)

これにより、それらの依存関係が認識され、最初のパスでパドルにボールのダミーの初期値が与えられます。

于 2013-08-30T02:56:34.743 に答える