“最大连续数”问题的“j”表达式是什么?

mad*_*ake 6 j apl

在论文“数组语言中的组合逻辑和组合器”中,他们给出了 APL 中的解决方案:

\n
      vec \xe2\x86\x90 1 1 0 1 1 1 0 0 0 1\n      \xe2\x8d\x9d split (partition) on zeroes\n      \xe2\x8a\x86\xe2\x8d\xa8vec\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x821 1\xe2\x94\x821 1 1\xe2\x94\x821\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x98\n      \xe2\x8d\x9d size of each sublist\n      \xe2\x89\xa2 \xcc\x88\xe2\x8a\x86\xe2\x8d\xa8vec\n2 3 1\n      \xe2\x8d\x9d max reduction\n      \xe2\x8c\x88/\xe2\x89\xa2\xc2\xa8\xe2\x8a\x86\xe2\x8d\xa8vec\n3\n
Run Code Online (Sandbox Code Playgroud)\n

为了清楚起见,他们还指出:

\n
\n

对于那些不读 APL 的人来说,可以翻译最终的最大连续数 APL 解决方案:\nreduce(max, map(length, W(partition, vec)))

\n
\n

那么,如何用 J 表达以下内容呢?

\n
 \xe2\x8c\x88/\xe2\x89\xa2\xc2\xa8\xe2\x8a\x86\xe2\x8d\xa8vec\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x8a\x86符号似乎是一个“分区”运算符。目前尚不清楚 J 中是否存在这种情况,但我可能只是错过了它。很好奇上面的表达式在“J”中会是什么。

\n

bob*_*bob 4

丹·布朗在评论中的回答是肯定的选择。我制作了一个关于这个问题的视频,如果您有兴趣,可以观看我介绍不同的选项。https://www.youtube.com/watch?v=lbi_PMVbeaQ 我最终喜欢的版本是

t=:[: >./ [: #;. _2 ,&0

但我也看看

t=:[: {: [: $ [: ];. _2 ,&0

作为备选。

  • 滥用“];.”因为它的结果形状很美味。爱它。 (3认同)