笔记
这不是 REBOL 特定的问题。你可以用任何语言回答。
背景
REBOL语言支持创建特定领域的语言,在 REBOL用语中称为“方言” 。我为列表推导创建了这样一种方言,REBOL 本身并不支持这种方言。
列表推导需要一个好的笛卡尔积算法。
问题
我使用元编程来解决这个问题,通过动态创建然后执行一系列嵌套foreach
语句。它工作得很好。但是,因为它是动态的,所以代码的可读性不是很高。REBOL 不能很好地进行递归。它迅速耗尽堆栈空间并崩溃。所以递归解决方案是不可能的。
总之,如果可能的话,我想用一种可读的、非递归的“内联”算法替换我的元编程。解决方案可以是任何语言,只要我可以在 REBOL 中重现它。(我几乎可以阅读任何编程语言:C#、C、C++、Perl、Oz、Haskell、Erlang 等等。)
我应该强调,这个算法需要支持任意数量的要“加入”的集合,因为列表理解可以涉及任意数量的集合。