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

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

{ 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 ]

4 голосов
/ 21 февраля 2012

Я не уверен, существует ли существующий библиотечный метод, который делает это (я только начинаю), но вы можете сделать это, составив 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 }
}
1 голос
/ 27 мая 2013

Использование 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 } }
...