KDB + / Q - over(/)2个值列表

时间:2016-08-14 21:26:11

标签: functional-programming kdb q-lang

如何使用" over"在2个输入列表中,每次从2个列表中挑选1个元素?

例如,有:

(+/)[1;2 3] = +[+[1;2];3] = 6

如何做以下事情:

f:{x+y+z};

(f/)[1;2 3;22 33] = f[f[1;2;22];3;33] = 61

谢谢。

2 个答案:

答案 0 :(得分:0)

"在"每次都有两个参数,所以三个参数不是一个选项:http://code.kx.com/q/ref/control/#over

为了实现你所提到的,功能和输入必须扭曲:

f:{x+y[0]+y[1]}
(f/)1,flip(2 3;22 33)

答案 1 :(得分:0)

这应该与您描述的完全一致,这是over /的折叠行为。当使用3个参数时,函数会循环显示yz的列表,将它们应用于前一个表达式的输出。考虑到您提供的数字:

x:1
y:2 3
z:22 33

维基页面将其描述为:

  

f [f [f [f [x; y0; z0]; y1; z1]; ... yn-1; zn-1]; yn; zn]

伪代码看起来像是:

res = x + y[0] + z[0]    // pass this value forward
    = res + y[1] + z[1]