私は関数型プログラミングのバックグラウンドを持っており、反復的な問題ではなく、問題に対する再帰的な解決策について最初に考えています。私は Rebol (具体的には R3) を少し使用し始めており、アキュムレータを使用した末尾再帰関数を使用して素因数カタのソリューションを作成しました。しかし、十分に大きな入力があると、スタックを吹き飛ばします。私は、「tail-func.r」と呼ばれる Rebol2 用のスクリプトを持っています。これは、AFAIK が R3 に移植されていないバージョンの末尾呼び出し最適化を実装しています。多くの場合、Rebol 3 は R2 とは異なる方法で実装されていることは知っていますが、追加のコードなしで Rebol 3 で TCO を取得する方法はありますか? そうでない場合、古いスクリプトを移植せずに入手する簡単な方法はありますか?
私のコードを追加するために編集:
primefactors: function [n m factors] [
either n > 1
[ either (modulo n m) == 0
[ primefactors (n / m) m (append factors m) ]
[ primefactors n (m + 1) factors ] ]
[ factors ]
]
primefactors 30 2 (copy []) => [2 3 5]