【发布时间】:2017-03-22 18:06:49
【问题描述】:
在 haskell 中,我们编写的所有 IO 代码都只是一个动作(许多人建议将其视为正在生成的脚本)。它是最终执行它们的主要方法(执行构造的脚本)。那么下面的程序是如何工作的呢? infi 函数永远不会返回。那么为什么字符串会被无限打印呢?
infi =
do
print "hello"
infi
main =
do
infi
【问题讨论】:
-
为什么您的程序需要暂停才能执行任何操作?在这方面,这并不是 haskell 独有的。我可以用任何语言编写无限 for 循环,并在每次迭代时打印出来。
-
@jkeuhlen 但是在其他语言中,您通过副作用进行打印 - 这是微不足道的。 OP 的问题是,如果构造该 IO 值的函数永远不会返回(而答案是懒惰),那么如何执行任何构造的
IO值。这个问题并不真正适用于其他语言。 -
@sepp2k 很公平,我错过了与问题的区别。我将更新我的答案以更多地处理懒惰。
-
infi不是函数。此外,Haskell 函数不会“返回”。