【发布时间】:2010-09-17 23:18:59
【问题描述】:
注意
这不是 REBOL 特定的问题。您可以用任何语言回答。
背景
REBOL 语言支持创建在 REBOL parlance 中称为“方言”的特定领域语言。我为列表推导创建了这样一种方言,REBOL 本身并不支持这种方言。
列表推导需要一个好的笛卡尔积算法。
问题
我使用元编程来解决这个问题,方法是动态创建并执行一系列嵌套的foreach 语句。它工作得很好。但是,因为它是动态的,所以代码的可读性不是很高。 REBOL 不能很好地进行递归。它迅速耗尽堆栈空间并崩溃。所以递归解决方案是不可能的。
总之,如果可能的话,我想用一种可读的、非递归的“内联”算法来替换我的元编程。解决方案可以是任何语言,只要我可以在 REBOL 中重现它。 (我几乎可以阅读任何编程语言:C#、C、C++、Perl、Oz、Haskell、Erlang 等等。)
我要强调的是,这个算法需要支持任意数量的要“加入”的集合,因为列表理解可以涉及任意数量的集合。
【问题讨论】:
标签: algorithm language-agnostic rebol cartesian-product