基本的なフォームが次のような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 として渡される更新されたハッシュも返します。