我想探索一种更好的方法来应用通过两个参数的每个元素进行迭代的二进制函数。通过使用以下函数作为示例,使问题更简单:
func:{x+y}
a:til 10
q)a
0 1 2 3 4 5 6 7 8 9
b:a
q)b:a
q)b
0 1 2 3 4 5 6 7 8 9
我得到的是叉积,这样参数的每个元素将相互交叉并应用函数。我的预期结果是
0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 10 2 3 4 5 6 7 8 9 10 11 3 4 5 6 7 8 9 10 11 12 4 5 6 7 8 9 10 11 12 13 5 6 7 8 9 10 11 12 13 14 6 7 8 9 10 11 12 13 14 15 7 8 9 10 11 12 13 14 15 16 8 9 10 11 12 13 14 15 16 17 9 10 11 12 13 14 15 16 17 18
我当前的解决方案是首先越过参数列表:
(func/) each (a cross b)
我想知道有更好的方法吗?只需使用func'[a;b]
就会得到成对的结果,这不是我想要的。
答案 0 :(得分:1)
以下应该是您想要的:
a +/:\: b
同样可以应用于其他定义的函数,例如:
a {x mod y}/:\: b
答案 1 :(得分:1)
您不需要为此仅向右或向左交叉。由于“ +”是向量函数,因此您只需遍历一个列表并将其他列表用作完整向量即可。
q) a+/:b