【发布时间】:2012-04-23 01:06:56
【问题描述】:
假设我们有一个这样的程序:
list = [1..10000000]
main = print $ sum list
我希望对其进行编译,以便可执行文件仅打印 50000005000000,而无需花费太多时间和精力。
基本上,任何肯定会被计算的表达式(也许严格性分析在这里会有所帮助)都可以在编译期间预先计算(即我们使用引用透明性来表示它不是真的计算值时很重要)。
简而言之:“必须计算”+引用透明=可以预先计算
这就像运行程序直到我们遇到取决于输入的东西(即程序的核心,所有输入通用的,将被预先计算)
目前是否有实现这一目标的现有机制(在 Haskell 或任何其他语言中)? [请不要指向 C++ 中的模板之类的东西,因为它首先没有引用透明性。]
如果不是,这个问题有多难? [伴随的技术(和理论)问题是什么?]
【问题讨论】:
标签: haskell referential-transparency precompute