微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

haskell – Netwire相互依赖的电线

为了试用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

以及在这两条线路中使用延迟功能的其他变化,但我得到<< loop>>无论运行时错误.

如何初始化其中一根电线以使该系统可以工作?

解决方法

当然,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)

这确认了它们的依赖性,并在第一次传球时为球拍给出球的虚拟初始值.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐