这个kbd函数如何工作?

时间:2017-09-13 17:59:37

标签: kdb

有人请说明以下功能吗? kdb如何在这里使用x?

我将原始函数更改为“func”我知道它使用在que中分配的查询来查询这两个函数。问题是我不知道那些x 0和x 0 1是如何工作的。我知道0是索引1,1是索引2,x是参数。

svcs:`TEST:1`TEST:2
que: (`$"select count sym from trades";`$"select sum size from trades")

{func[x 0;string x 1],x 0 1}each svcs cross que

2 个答案:

答案 0 :(得分:3)

x作为一个两元素列表传入,每次调用该函数。

暂时忘掉func描述,只需添加一些日志记录就可以更清楚地看到事情:

q)svcs cross que
TEST:1 select count sym from trades
TEST:1 select sum size from trades
TEST:2 select count sym from trades
TEST:2 select sum size from trades
q){show enlist "x 0 is ",string x 0;show enlist "x 1 is ",string x 1;show raze "
x 0 1 is ",(string x 0)," & ", (string x 1)}each svcs cross que;
"x 0 is TEST:1"
"x 1 is select count sym from trades"
"x 0 1 is TEST:1 & select count sym from trades"
"x 0 is TEST:1"
"x 1 is select sum size from trades"
"x 0 1 is TEST:1 & select sum size from trades"
"x 0 is TEST:2"
"x 1 is select count sym from trades"
"x 0 1 is TEST:2 & select count sym from trades"
"x 0 is TEST:2"
"x 1 is select sum size from trades"
"x 0 1 is TEST:2 & select sum size from trades"

或个别例子:

q)x:(`TEST:1;`$"select count sym from trades")
q)x 0
`TEST:1
q)x 1
`select count sym from trades
q)x 0 1
`TEST:1`select count sym from trades

x 0 1索引并检索第一个和第二个元素(返回

答案 1 :(得分:1)

您是对的,x 0x 1x[0]x[1]相同(请参阅下面的索引列表链接),但问题可能是x是什么并不明显。

由于副词each,该函数执行四次次,svcs cross que

中的每一项都执行一次

请参阅;

q)count svcs cross que
4

然后svcs cross que中的每个项目都有两个项目。

q)count each svcs cross que
2 2 2 2

因此,在第一次执行中,xsvcs cross que的第一项,依此类推。

q)first svcs cross que
`TEST:1`select count sym from trades
q)(first svcs cross que) 0
`TEST:1
q)(first svcs cross que) 1
`select count sym from trades
q)(first svcs cross que) 0 1
`TEST:1`select count sym from trades

参考

http://code.kx.com/q4m3/6_Functions/#671-monadic-each

http://code.kx.com/q4m3/3_Lists/#34-indexing