ノート
これは REBOL 固有の質問ではありません。どの言語でも答えることができます。
バックグラウンド
REBOL言語は、 REBOL用語で「方言」と呼ばれるドメイン固有言語の作成をサポートしています。私は、REBOL ではネイティブにサポートされていないリスト内包表記のために、そのような方言を作成しました。
リスト内包表記には、優れたデカルト積アルゴリズムが必要です。
問題
これを解決するためにメタプログラミングを使用して、ネストされた一連のforeach
ステートメントを動的に作成してから実行しました。美しく機能します。ただし、動的であるため、コードはあまり読みやすくありません。REBOL は再帰をうまく行いません。スタック領域が急速に不足し、クラッシュします。したがって、再帰的な解決策は問題外です。
要約すると、可能であれば、メタプログラミングを読み取り可能で再帰的でない「インライン」アルゴリズムに置き換えたいと考えています。ソリューションは、REBOL で再現できる限り、どの言語でもかまいません。(C#、C、C++、Perl、Oz、Haskell、Erlang など、ほぼすべてのプログラミング言語を読むことができます。)
リスト内包表記には任意の数のセットを含めることができるため、このアルゴリズムは任意の数のセットを「結合」することをサポートする必要があることを強調しておきます。