我有一个 Scheme 函数,其基本形式如下所示
(define (foo param var)
(cond ((end-condition) (return-something))
((other-end-condit) (return-something-else))
(else
(let ((newvar (if some-condition
(make-some-updated var)
(destructive-update! var))))
(foo param newvar)))))
我觉得这很明显需要针对编译中的迭代进行优化,但是当我编译它(用鸡)时,它仍然运行得非常慢。(如果我了解 R5RS 规格:http ://groups.csail.mit.edu/mac/ftpdir/scheme-reports/r5rs-html.old/r5rs_22.html ,这看起来应该可以)
我在 python 中使用 while 循环编写了完全相同的算法,解释程序在几秒钟内终止。我编译的方案大约需要 15 分钟,我很肯定算法是相同的。
我认为这是一个没有得到优化的尾递归问题,因为我想不出还有什么可能,但我想不通。有任何想法吗?就其价值而言,var 是一个散列,破坏性更新只是添加一个元素,尽管它还返回要作为 newvar 传入的更新后的散列。