kdb-如何使用';其中';职能工作

kdb-如何使用';其中';职能工作,kdb,Kdb,我想了解下面的陈述发生了什么: sum(til 100) where 000011110000b 这条线的值是22,我不知道为什么总和(til 100)为4950其中00001110000B返回列表4 5 6 7。kdb参考页似乎没有解释这个用例。为什么上面这一行的值是22 另外,为什么下面的一行会导致错误 4950 where 000011110000b 方括号用于函数调用参数,而不是括号。因此,上述内容被解释为: sum[(til 100) where 000011110000b] 现

我想了解下面的陈述发生了什么:

sum(til 100) where 000011110000b
这条线的值是22,我不知道为什么<代码>总和(til 100)为
4950
<代码>其中00001110000B返回列表
4 5 6 7
。kdb参考页似乎没有解释这个用例。为什么上面这一行的值是22

另外,为什么下面的一行会导致错误

4950 where 000011110000b

方括号用于函数调用参数,而不是括号。因此,上述内容被解释为:

sum[(til 100) where 000011110000b]
现在你可能可以看到为什么它会计算为22,也就是说,它是列表
til100
的第五、第六、第七、第八个值的总和,即(0…99),因为
其中
使用布尔列表
00001110000b
索引到
til100

q)til[100] where 000011110000b
4 5 6 7
正如您所注意到的,在调用函数时可以省略方括号;但在这样做时,您需要确保它将按预期进行解析/解释。通常,代码从右向左求值,因此在本例中,
(til 100),其中首先求值00001110000b
,然后将结果传递给
求和
函数

关于
4950,其中00001110000b
——同样,如果我们从右向左思考,解释器试图将
where 00001110000b
的结果传递给函数
4590
。虽然
4590
不是kdb中的命名函数-这是IPC使用的格式,即通过TCP在其他kdb进程上执行命令。因此,您告诉kdb使用操作系统文件描述符4590(几乎肯定不会对应于有效的TCP连接)来运行命令
where 00001110000B
。有关更多详细信息,请参阅此处的“消息格式”部分: