避免在火车上重复动词名称

Avoiding a repeated verb name in a train

考虑一个二元动词 g,根据二元动词 f:

定义
g=. [ f&.|: f

是否可以重写 g 以便 f 项只出现一次,但行为不变?

更新:本地上下文

这个问题是我对 this problem 的解决方案的一部分,"expanding" 是一个双向矩阵,如下所示:

原始矩阵

1 2 3
4 5 6
7 8 9

扩展矩阵

1 1 1 1 2 3 3 3 3
1 1 1 1 2 3 3 3 3
1 1 1 1 2 3 3 3 3
1 1 1 1 2 3 3 3 3
4 4 4 4 5 6 6 6 6
7 7 7 7 8 9 9 9 9
7 7 7 7 8 9 9 9 9
7 7 7 7 8 9 9 9 9
7 7 7 7 8 9 9 9 9

我的解决方案是首先使用以下方法扩展矩阵行:

f=. ([ # ,:@{.@]) , ] , [ # ,:@{:@]

然后在转置下应用相同的解决方案来扩展已经行扩展的矩阵的列:

3 ([ f&.|: f) m

而且我注意到我无法通过制作临时动词 f 或重复其内联定义来编写我的解决方案...

Try it online!

我认为这是不可能的。右齿将是 x f y 的结果,左齿是 x 中间齿将转置并将 f 应用于参数,然后将结果转回。如果你把右边的 f 拿出来,那么就没有办法得到 x f y,如果中间的 f 被去掉,那么你就没有 f 应用于转置。

我的猜测是,您正在寻找一种仅需提及一次 f 即可实现相同结果的基元,但我不知道有一个。

了解 J 社区的人会证明我错了!

了解上下文会有所帮助。您也可以使用 (|:@f)^:(+: x) y 来解决这个问题。一个默认的(和打高尔夫球的)解决方案是 0&(|:{.,],{:)~+:.

   (>: i. 3 3) (0&(|:{.,],{:)~+:) 2
1 1 1 2 3 3 3
1 1 1 2 3 3 3
1 1 1 2 3 3 3
4 4 4 5 6 6 6
7 7 7 8 9 9 9
7 7 7 8 9 9 9
7 7 7 8 9 9 9