考虑一个二元动词g
,用动词f
定义:
g=. [ f&.|: f
是否可以重写g
以便f
词只出现一次,但行为不变?
这个问题是我this problem解决方案的一部分,它在两个方向上“扩展”矩阵,如下所示:
原始矩阵
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
编写我的解决方案是不可能的,或者重复其内联定义......
答案 0 :(得分:2)
了解上下文有帮助。您也可以使用(|:@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
答案 1 :(得分:1)
我认为不可能。正确的齿将是x f y
的结果,左齿为x
中间齿将转置并将f
应用于参数,然后将结果转置回来。如果你选择了正确的f
,那么就无法拥有x f y
,如果中间f
被删除,那么你没有将f
应用于转置。
我的猜测是你正在寻找一个只用一次提及f
就能完成相同结果的原语,但我不知道一个。
了解J社区有人会证明我错了!