【发布时间】:2021-02-15 01:46:13
【问题描述】:
我正在尝试在 APL 中复制外部产品符号:
∘.,⍨ 'x1' 'y1' 'z1' 'x2' 'y2' 'z2' 'x3' 'y3' 'z3'
产生
x1x1 x1y1 x1z1 x1x2 x1y2 x1z2 x1x3 x1y3 x1z3
y1x1 y1y1 y1z1 y1x2 y1y2 y1z2 y1x3 y1y3 y1z3
z1x1 z1y1 z1z1 z1x2 z1y2 z1z2 z1x3 z1y3 z1z3
x2x1 x2y1 x2z1 x2x2 x2y2 x2z2 x2x3 x2y3 x2z3
y2x1 y2y1 y2z1 y2x2 y2y2 y2z2 y2x3 y2y3 y2z3
z2x1 z2y1 z2z1 z2x2 z2y2 z2z2 z2x3 z2y3 z2z3
x3x1 x3y1 x3z1 x3x2 x3y2 x3z2 x3x3 x3y3 x3z3
y3x1 y3y1 y3z1 y3x2 y3y2 y3z2 y3x3 y3y3 y3z3
z3x1 z3y1 z3z1 z3x2 z3y2 z3z2 z3x3 z3y3 z3z3
但我不知道如何在 J 中做类似的事情。我发现这个 Cartesian product in J 帖子我认为足够相似,但我似乎无法将它转换为来自数字数组。
改编 Dan Bron 的答案并将其应用于更简单的示例
6 6 $ , > { 2 # < 'abc'
给予
aaabac
babbbc
cacbcc
aaabac
babbbc
cacbcc
这几乎是我想要的,但我不知道如何概括它以使用 2 个字母(或更多)字符串而不是类似方式的单个字符串。我也不知道如何用 APL 输出对之间的空格来格式化这些结果,所以它也可能不是正确的路径。
同样,我尝试从该线程中改编 Michael Berry 的答案以获得
9 36 $ ,,"1/ ~ 9 2 $ 'x1y1z1x2y2z2x3y3z3'
给了
x1x1x1y1x1z1x1x2x1y2x1z2x1x3x1y3x1z3
y1x1y1y1y1z1y1x2y1y2y1z2y1x3y1y3y1z3
z1x1z1y1z1z1z1x2z1y2z1z2z1x3z1y3z1z3
x2x1x2y1x2z1x2x2x2y2x2z2x2x3x2y3x2z3
y2x1y2y1y2z1y2x2y2y2y2z2y2x3y2y3y2z3
z2x1z2y1z2z1z2x2z2y2z2z2z2x3z2y3z2z3
x3x1x3y1x3z1x3x2x3y2x3z2x3x3x3y3x3z3
y3x1y3y1y3z1y3x2y3y2y3z2y3x3y3y3y3z3
z3x1z3y1z3z1z3x2z3y2z3z2z3x3z3y3z3z3
再一次,这几乎是我想要的,这个处理了多个字符,但它们之间仍然没有空格,并且命令与 APL 版本的简单性越来越远。
我可以使用 ravel items 更清晰地获得相同的结果
,. ,"1/ ~ 9 2 $ 'x1y1z1x2y2z2x3y3z3'
我一直在阅读 J 入门并探索在字典中看起来相关的部分,但我仍然很新,所以如果这是一个愚蠢的问题,我深表歉意。我觉得秩联合运算符应该能够在这里帮助我,但是我很难按照入门书中的解释进行操作。我使用": 尝试将字符串格式化为带有尾随空格,但我也无法弄清楚。这在 APL 中如此简单的事实也让我觉得我在 J 中做错了事,会遇到这么多麻烦。
在阅读了更多的入门书后,我得到了一些看起来像我想要的东西
,. 9 1 $ ' ' ,."2 ,"1/~ [ ;._2 'x1 y1 z1 x2 y2 z2 x3 y3 z3 '
但这仍然比 APL 版本复杂得多,所以我仍然希望有一种真正优雅简洁的方法来做到这一点。
【问题讨论】:
标签: j