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
。有关更多详细信息,请参阅此处的“消息格式”部分: