【发布时间】:2013-05-18 03:44:33
【问题描述】:
假设您必须编写一个程序来测试所有程序以寻找完成特定任务的程序。例如,考虑这个 JavaScript 函数:
function find_truth(){
for(n=0;;++n){
try {
var fn = Function(string(n));
if (fn() == 42)
return fn;
} catch() {
continue;
}
}
}
只要string(n)返回第n个可能的字符串("a", "b", "c", ... "aa", "ab" ...),这个程序最终会输出一个函数评估为42。这种方法的问题在于它枚举了可能是或不可能是有效程序的字符串。我的问题是:是否可以自己枚举程序?怎么样?
【问题讨论】:
-
如果您的程序有一个抽象语法树,并列举了 that 的变体,也许它会更接近您的设想?不过,这只会帮助解决语法错误;语义问题可能仍然存在,具体取决于您制作随机发生器的全面程度。
-
我认为你必须迭代几百万年才能遇到一个有效的程序。也许如果它是由Improbability Drive
-
@Dokkat:我不知道有什么具体的作品,但我的理解是这种自动程序空间搜索是一个相当大的研究领域。它通常在“自动错误修复”的上下文中完成。这是我通过快速 google 找到的一篇论文:cs.unm.edu/~pdevineni/papers/Strawn.pdf
-
@Dokkat:这是一个试图实现这一点的实际研究项目的另一个资源:dijkstra.cs.virginia.edu/genprog
-
您有兴趣阅读Chaitin's Omega
标签: javascript algorithm language-agnostic genetic-programming