KDB +/Q:关于内部函数中未使用的参数

zrb*_*zrb 4 k kdb

我有这个功能 f

f:{{z+x*y}[x]/[y]}
Run Code Online (Sandbox Code Playgroud)

我可以在f没有第三个参数的情况下调用,但是我得到了,但是如果{z+x*y}没有第三个参数,内部能够完成吗?

ter*_*nch 6

如果给出一个带有两个参数的函数的单个列表,kdb将假设您希望第一个为x而余数为y(在over和scan的上下文中,通常不是).例如:

q){x+y}/[1;2 3 4]
10
Run Code Online (Sandbox Code Playgroud)

也可以通过以下方式实现:

q){x+y}/[1 2 3 4]
10
Run Code Online (Sandbox Code Playgroud)

这很可能是你的例子中发生的事情.

编辑:

特别是,您可以使用此功能

q){{z+x*y}[x]/[y]}[2;3 4 5 6]
56
Run Code Online (Sandbox Code Playgroud)

相当于(由于x的投影):

q){y+2*x}/[3 4 5 6]
56
Run Code Online (Sandbox Code Playgroud)

相当于(由于我原来的观点):

q){y+2*x}/[3;4 5 6]
56
Run Code Online (Sandbox Code Playgroud)

这解释了为什么不需要"第三"参数

  • 这就是'over/scan'的行为.如果输入是二元函数的原子而不调用函数,则返回atom.要获得输出中的投影,需要使用像({x + y} /)[4;]这样的形式,这对于新函数现在需要列表/原子是有意义的. (2认同)