【发布时间】:2012-01-30 08:40:24
【问题描述】:
显然,可以实现 Haskell 以使其在不改变语言语义的情况下急切地求值。如果是这样,无限数据结构是如何处理的?
http://csg.csail.mit.edu/pubs/haskell.html
因此,大量时间用于创建和销毁暂停的计算(thunk)。很多时候,这些计算非常简单,以至于评估它们同样容易。 Faxen 和其他人已经使用静态分析来揭示这种渴望的机会。相反,我们建议在任何地方都使用渴望,同时使用允许我们在程序过于渴望时恢复的机制。
关键是“如果我们的程序过于急切,我们有恢复机制”。这些机制是什么?它们如何允许无限的数据结构和惰性求值的其他方面,我一直认为这些方面在热切的语言中是不可能的?
【问题讨论】:
-
您链接到的页面似乎提供了机制的概述。你有什么具体要澄清的吗?
-
是的,当我继续阅读时,我才意识到这一点。应该先阅读全文。我觉得自己像个傻瓜:p 当有人犯这样的错误时,SO 程序是什么?我应该删除问题吗?
-
关闭问题通常没问题。无论如何,ehird 的答案很有用,最好在保留信息方面犯错。
-
我认为这样的问题很有价值,因为链接的页面很长并且涉及很多细节;对其工作原理的简短总结是一件好事。
-
您可以用一种急切的语言创建“无限”的数据结构。举一个愚蠢的例子,您可以将编译为 C 的 Haskell 代码视为 C 程序。如果 Haskell 程序包含无限结构,那么 C 程序也是如此。
标签: haskell lazy-evaluation infinite eager