Haskell:可以递归调用main吗?

时间:2019-09-17 17:50:32

标签: haskell recursion

我已经看到很多示例,其中main调用一个辅助函数,该函数以递归方式调用自身,例如

main = loop
  where
    loop = do
      putStrLn "I'm in a loop"
      loop

我从未见过main递归调用自己的情况,例如

main = do
  putStrLn "I'm in a loop"
  main

尽管它似乎运行良好,但让我想知道为什么我从未见过它。是否被认为是非习惯用语?它会改变编译后的程序吗?

2 个答案:

答案 0 :(得分:14)

这很好,但是很少重复执行程序的每个部分是很不常见的。通常,您需要进行一次一次性设置或其他一些设置,然后进入循环执行剩余部分;或者在主循环完成后需要做一些清理工作。在这种情况下,您无法再次调用main,因为它将每次都进行一次设置(或清除)。如果您没有一次性设置,请随时main对其进行呼叫。

答案 1 :(得分:2)

由于上次调用优化在Haskell中是常事,所以没问题。 Learn You A Haskell包含一些使用这种递归的示例。另外,此StackOverflow's post对该主题进行了更深入的研究。

相关问题