我刚刚开始涉足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
,但每一对都被单独推送到堆栈上。至少它是扁平的,但我希望它们都在一个数组中。
我该怎么做呢?
发布于 2012-02-21 10:26:44
我不确定是否有现成的库方法可以做到这一点(我刚刚开始),但你可以通过将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 }
}
发布于 2013-05-27 20:30:51
使用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 } }
https://stackoverflow.com/questions/9346790
复制相似问题