q - 压缩时应用任意函数

q - Applying arbitrary function while zipping

在 q 中,双向 zip 操作由 ' 完成。即

l1:("a1";"a2")
l2:("b1";"b2")
(l1,'l2)~("a1b1";"a2b2")

我将此 ' 解析为二元运算符 '[g;l2],其中 g 是列表上某些二元函数到一元函数的投影,例如g:,[l1;]

所以如果我们想在压缩操作期间执行除,之外的任何其他映射,我会重新定义g

但是,'[g;l2] 没有给我预期的列表输出,而是 returns func

问题是:如何在压缩过程中应用任意贴图?例如。我如何做类似 l1 f' l2 的事情,在示例 f:, 中,但通常 f 某些二元运算符用于列表项?

感谢您的帮助

how do I apply arbitrary maps during the zipping operation?

像这样:

q)f:{x+y}
q)f'[10*x;x:til 5]
0 11 22 33 44

如果你喜欢中缀符号,你也可以这样做

q)(10*x) f' til 5
0 11 22 33 44

请注意 '[g;l1]composition。如果要创建投影,请执行

q)g:,'[l1;]
q)g l2
"a1b1"
"a2b2"