我只是在学习Haskell,并试图找出实现视线算法的最惯用方法。
我发现的演示代码使用状态monad,但对我来说(我只是初学者)递归传递状态似乎更简单。我在这里错过了什么?是否存在性能问题?
在以下位置找到代码:http://www.finalcog.com/bresenham-algorithm-idiomatic-haskell
谢谢,
克里斯。
答案 0 :(得分:12)
到处传递状态可能会有点麻烦。此外,状态monad是大多数haskell编码器所熟知的,所以他们会知道你在做什么。如果您在monad之外手动滚动自己,那么辨别代码的作用可能会很棘手。
我发现状态monad整齐用于封装状态更改,很明显你的代码的哪一部分是有状态的(即改变或取决于状态)w.r.t.其余的纯粹东西。
答案 1 :(得分:11)
对于较大的程序,最好隐藏monad中通过管道的状态。那时出错的风险较小。
答案 2 :(得分:3)
使用monad传递状态而不是明确传递状态的一个好处是,为monad定义了许多有用的组合器,你可以使用它们。