在Factor语言中计算两个序列的笛卡尔积

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,但是每一对都被单独推送到堆栈上。至少它是平的,但我想要它们都在一个数组中。
我该怎么做?
2个回答

4

我不确定是否有现成的库方法可以做到这一点(我自己也刚开始学习),但你可以通过组合cartesian-productappendreduce来实现:

--- 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
使用来自sequences.extras的flatten1函数:
IN: scratchpad { 1 2 3 } { 8 9 } cartesian-product flatten1 .
{ { 1 8 } { 1 9 } { 2 8 } { 2 9 } { 3 8 } { 3 9 } }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接