哈斯克尔:我是否重新发明了列表Monad?

时间:2011-12-09 12:19:18

标签: haskell monads

在这里完成Haskell新手,我的道歉......

我正在尝试从另一个序列中创建一个值序列,并生成最后一个值(所以对我来说,如何使用map不是很明显)。

在clojure中,我会使用loop构造,它基本上等同于递归函数。所以我认为我可以使用

行的递归函数来解决这个问题
genSequence :: [a] -> [b] -> [a]
genSequence result [] = reverse result
genSequence a:as b:bs = genSequence ((computeNextA a b):a:as) bs

我觉得这不是那么糟糕(真正的功能当然更复杂......)但是我读到了monads(阅读了Philip Walder的优秀教程,然后是clojure中monad的一些内容)并且无法帮助我在这里使用它们的感觉。到目前为止,我对monad的了解纯粹是理论上的,不幸的是,如果你能帮助我,我会非常感激。

1 个答案:

答案 0 :(得分:4)

不确定这是否有帮助,但有些类似(假设computeNextA+

genSequence [4] [60,70,80,90]
--[4,64,134,214,304]

相当于

scanl (+) 4 [60,70,80,90]
--[4,64,134,214,304]