【发布时间】:2014-05-10 04:36:59
【问题描述】:
Haskell 不像许多其他语言那样有循环。我了解它背后的原因以及在没有它们的情况下用于解决问题的一些不同方法。但是,当需要循环结构时,我不确定创建循环的方式是否正确/良好。
例如(平凡的函数):
dumdum = do
putStrLn "Enter something"
num <- getLine
putStrLn $ "You entered: " ++ num
dumdum
这工作正常,但代码中是否存在潜在问题?
另一个例子:
a = do
putStrLn "1"
putStrLn "2"
a
如果以 Python 等命令式语言实现,则如下所示:
def a():
print ("1")
print ("2")
a()
这最终会导致最大递归深度错误。 Haskell 中似乎不是这种情况,但我不确定它是否会导致潜在问题。
我知道还有其他用于创建循环的选项,例如 Control.Monad.LoopWhile 和 Control.Monad.forever——我应该改用它们吗? (我对 Haskell 还很陌生,还不了解 monad。)
【问题讨论】:
-
你应该在谷歌上搜索“尾调用优化”。
-
a = mapM print [1..2] >> a?
标签: haskell