【问题标题】:kdb - how does the 'where' function workkdb - 'where' 功能如何工作
【发布时间】:2016-12-29 07:11:02
【问题描述】:

我想了解以下语句发生了什么:

sum(til 100) where 000011110000b

该行的值为 22,我不知道为什么。 sum(til 100)4950where 000011110000b 返回列表 4 5 6 7。 kdb 参考页面似乎没有解释这个用例。为什么上面的行计算为 22?

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

4950 where 000011110000b

【问题讨论】:

    标签: kdb


    【解决方案1】:

    方括号用于函数调用参数,而不是括号。所以上面被解释为:

    sum[(til 100) where 000011110000b]
    

    您现在可能会看到为什么它会计算为 22,即它是列表 til 100 的第 5、6、7、8 个值的总和,即 (0...99),因为 @987654324 @ 正在使用布尔列表 000011110000b 索引到 til 100

    q)til[100] where 000011110000b
    4 5 6 7
    

    如您所见,调用函数时可以省略方括号;但是这样做时,您需要确保它将按预期进行解析/解释。通常,代码会从右到左进行评估,因此在这种情况下首先评估(til 100) where 000011110000b,然后将结果传递给sum 函数。

    关于4950 where 000011110000b - 如果我们从右到左思考,解释器正试图将where 000011110000b 的结果传递给函数4590。尽管4590 不是 kdb 中的命名函数 - 这是用于 IPC 的格式,即通过 TCP 在其他 kdb 进程上执行命令。因此,您告诉 kdb 使用编号为 4590 的操作系统文件描述符(几乎可以肯定不会对应于有效的 TCP 连接)来运行命令where 000011110000b。有关详细信息,请参阅此处的“消息格式”部分: http://code.kx.com/q/tutorials/startingq/ipc/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 2012-02-24
      相关资源
      最近更新 更多