Вычисление декартового произведения двух последовательностей в факторе

Я только начинаю баловаться Фактором. Я хочу вычислить декартово произведение двух последовательностей:

{ 1 2 3 }
{ 8 9 }

То, что я хочу увидеть, это последовательность последовательностей:

{ { 1 8 } { 1 9 } { 2 8 } { 2 9 } { 3 8 } { 3 9 } }

Когда я использую cartesian-product словом, я получаю последовательность последовательностей последовательностей:

{ { { 1 8 } { 1 9 } } { { 2 8 } { 2 9 } } { { 3 8 } { 3 9 } } }

Я также пытался [ 2array ] cartesian-map, но я получаю то же самое. Наконец я попытался [ 2array ] cartesian-each, но я получаю каждую пару отдельно в стеке. По крайней мере, это плоский, но я хочу, чтобы они все в одном массиве.

Как мне это сделать?

2 ответа

Я не уверен, есть ли существующий метод библиотеки, который делает это (только начинаю сам), но вы можете сделать это, составив cartesian-product с append а также reduce:

--- Data stack:
{ "a" "b" "c" }
{ 1 2 3 4 } 
( scratchpad ) cartesian-product { } [ append ] reduce .
{
    { "a" 1 }
    { "a" 2 }
    { "a" 3 }
    { "a" 4 }
    { "b" 1 }
    { "b" 2 }
    { "b" 3 }
    { "b" 4 }
    { "c" 1 }
    { "c" 2 }
    { "c" 3 }
    { "c" 4 }
}

Использование flatten1 от sequences.extras:

IN: scratchpad { 1 2 3 } { 8 9 } cartesian-product flatten1 .
{ { 1 8 } { 1 9 } { 2 8 } { 2 9 } { 3 8 } { 3 9 } }
Другие вопросы по тегам