KDB'。'操作者

时间:2013-03-29 14:49:25

标签: kdb

最简单形式的.运算符用于索引列表。您如何在此代码中解释其在英语中的用法?

if[x~"last";upd:{[t;x].[t;();,;r::select by sym from x]}]

我也不理解这一行中的空列表和::运算符,但也许它们一旦理解就会有意义。被清除了。

2 个答案:

答案 0 :(得分:6)

用简单的英语我会解释为: 通过将append / comma函数应用于值r。

来修改all()索引处的表t

首先考虑一些简单的@:

案例
q)l:3 5 7 9
q)l:1.1 2.2 3.3
q)@[l; 0 2; +; 10]
11.1 2.2 13.3

q)d:`p`o`i!4.4 5.5 6.6
q)@[d; `p`i; -; 10]
p| -5.6
o| 5.5
i| -3.4

正如您所看到的格式是 的 @ [数据结构;指数;功能;的y参数]

表示索引处的dataStructure应用具有给定y参数的函数。注意列表l索引0 2意味着索引0和2在最顶层。没有办法使用@来深度索引。例如给定矩阵m:(1 2 3; 4 5 6; 7 8 9)我们如何使用这种格式只修改值4和6?

q)/ @ indexes repeatedly at topmost level
q)/ definitely not what we want
q)@[m;(1;0 2);+;100]
101 102 103
104 105 106
107 108 109

q)/ **. indexes into the data structure**

q).[m;1 2;+;100]
1 2 3
4 5 106
7 8 9

q).[m;(1;0 2);+;100]
1   2 3
104 5 106
7   8 9

最后,空列表()是一种简短的说法,适用于所有索引:

q).[m;();+;100]
101 102 103
104 105 106
107 108 109

答案 1 :(得分:1)

.在这种情况下,请将,应用于trr针对每次调用进行全局更新,并包含sym收到的最新值。在大多数情况下,::是对全局的分配。

code.kx.com详细描述了.功能