2012-02-19 130 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 } }