Вычисление декартового произведения двух последовательностей в факторе
Я только начинаю баловаться Фактором. Я хочу вычислить декартово произведение двух последовательностей:
{ 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 } }