- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图理解这种函数式响应式(Reactive)编程是如何工作的,但我遇到了一个问题。我正在尝试创建一个 boid simulation ,但我开始慢慢地,我现在已经将 boid 定义为一个函数,它采用起始位置并创建从一个位置到另一个位置的信号函数,其中输入是它移动的点,输出是当前位置:
type Position2 = Vector2 Float
boid :: Position2 -> SF Position2 Position2
boid s = loop (arr (uncurry seek) >>> integral >>> arr (^+^ s) >>> arr dup)
seek 函数需要两个输入(由于循环)。当前位置和目标位置。然后它只是创建一个从当前位置指向目标位置的矢量,其大小为 50,即速度。然后对速度进行积分并添加起始位置。最后信号被分成两部分,因此一个可以成为输出,另一个可以循环回搜索函数。
现在我可以像这样定义 boids:
aBoid = constant (vector2 500 500) >>> (boid (vector2 600 60))
bBoid = aBoid >>> (boid (vector2 3 4))
这里 aBoid 向点 (500, 500) 寻找,bBoid 向 aBoid 寻找。
我的问题是,当我希望两个机器人相互寻找时。当我这样做时:
aBoid = bBoid >>> (boid (vector2 600 60))
bBoid = aBoid >>> (boid (vector2 3 4))
程序只打印:ProgramName: <<loop>>
我认为这意味着它进入了无限循环。
我也尝试过使用 par
功能如下:
sim :: SF a [Position2]
sim = loop (arr snd >>> par route [boid (vector2 10 10), boid (vector2 100 100)] >>> arr dup)
这里是route
函数只是将每个 boid 的输出映射到另一个 boid 的输入(如 zip
,但偏移量为 1)
这也给出了 <<loop>>
消息。
我认为在处理响应式(Reactive)系统时,对象依赖于彼此的状态应该是一个非常常见的问题,所以我希望有一些优雅的解决方案。
我应该补充一点,我发现这个 FRP 的东西非常困难并且经常令人困惑,所以我不确定我是否有道理;)
最佳答案
我不太熟悉 Yampa/Animas,但问题本质上似乎是你有一个没有基本情况的递归;您描述了系统的演变,但没有描述它是如何开始的。
怎么样:
aBoid = bBoid >>> boid (vector2 600 60) >>> iPre (vector2 0 0)
bBoid = aBoid >>> boid (vector2 3 4)
这样 aBoid
从 (0,0) 开始,然后反馈循环在下一个瞬间开始?这是假设我对 iPre
的理解是正确的...
(如果您用 (.)
((>>>)
的翻转版本)来想象它,管道可能会更容易理解。)
关于haskell - 防止 Yampa/Animas 中 SF 相互依赖的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8649336/
我试图理解这种函数式响应式(Reactive)编程是如何工作的,但我遇到了一个问题。我正在尝试创建一个 boid simulation ,但我开始慢慢地,我现在已经将 boid 定义为一个函数,它采用
我是一名优秀的程序员,十分优秀!