9

我只是在学习 Haskell,并试图找出实现视线算法的最惯用的方法。

我找到的演示代码使用了 state monad,但对我来说(我只是一个初学者)递归地传递 state 似乎更简单。我在这里想念什么?是否存在性能问题?

在以下位置查找代码:http ://www.finalcog.com/bresenham-algorithm-idiomatic-haskell

谢谢,

克里斯。

4

3 回答 3

12

到处传递状态可能会变得有点冗长。此外,大多数 haskell 编码人员都知道 state monad,因此他们会知道您在做什么。如果您在 monad 之外手动滚动自己的代码,则很难辨别您的代码的作用。

我发现 state monad 可以很好地封装状态更改,很明显你的代码的哪一部分是有状态的(即改变或依赖于状态)wrt 其余的纯内容。

于 2009-09-21T20:09:10.440 回答
11

对于较大的程序,最好将状态传递管道隐藏在 monad 中。这样出错的风险就小了。

于 2009-09-21T20:22:12.363 回答
3

使用 monad 传递状态而不是显式传递状态的一个优点是,您可以使用为 monad 定义的许多有用的组合子。

于 2012-05-07T07:46:43.133 回答