Примечание
Это не специфичный для REBOL вопрос. Вы можете ответить на любом языке.
Фон
Язык REBOL поддерживает создание доменных языков, известных как "диалекты" в REBOL parlance . Я создал такой диалект для списочных представлений, которые изначально не поддерживаются в REBOL.
Для понимания списка необходим хороший алгоритм декартовых произведений.
Проблема
Я использовал метапрограммирование, чтобы решить эту проблему, динамически создавая и затем выполняя последовательность вложенных операторов foreach
. Работает красиво. Однако, поскольку он динамический, код не очень читабелен. REBOL плохо справляется с рекурсией. Он быстро исчерпывает пространство стека и падает. Так что о рекурсивном решении не может быть и речи.
В целом, я хочу заменить мое метапрограммирование читаемым, нерекурсивным, «встроенным» алгоритмом, если это возможно. Решение может быть на любом языке, если я могу воспроизвести его в REBOL. (Я могу читать практически на любом языке программирования: C #, C, C ++, Perl, Oz, Haskell, Erlang и т. Д.)
Я должен подчеркнуть, что этот алгоритм должен поддерживать произвольное количество наборов, которые должны быть "объединены", так как понимание списка может включать любое количество наборов.