计算因子中两个序列的笛卡尔积

时间:2012-02-19 04:46:30

标签: cartesian-product factor-lang

我刚开始涉足Factor。我想计算两个序列的笛卡尔积:

{ 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 个答案:

答案 0 :(得分:4)

我不确定是否存在执行此操作的现有库方法(仅限自己开始使用),但您可以通过将cartesian-productappendreduce组合来实现:< / p>

--- 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 :(得分:1)

使用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 } }