2012-02-19 85 views
3

我刚刚开始涉足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,但是我将它们分别推送到堆栈上。至少它是平坦的,但我希望它们都在一个阵列中。

我如何做到这一点?

回答

4

我不知道,如果有一个现有库的方法,做这个(刚开始我自己),但是你可以通过appendreduce组成cartesian-product做到这一点:

--- 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 } 
} 
0

使用flatten1sequences.extras

IN: scratchpad { 1 2 3 } { 8 9 } cartesian-product flatten1 . 
{ { 1 8 } { 1 9 } { 2 8 } { 2 9 } { 3 8 } { 3 9 } }