【发布时间】:2013-03-29 14:49:24
【问题描述】:
最简单形式的. 运算符用于索引列表。您如何解释这段代码中的英文用法?
if[x~"last";upd:{[t;x].[t;();,;r::select by sym from x]}]
我也不理解这一行中的空列表和 :: 运算符,但也许一旦 .被清除。
【问题讨论】:
标签: kdb
最简单形式的. 运算符用于索引列表。您如何解释这段代码中的英文用法?
if[x~"last";upd:{[t;x].[t;();,;r::select by sym from x]}]
我也不理解这一行中的空列表和 :: 运算符,但也许一旦 .被清除。
【问题讨论】:
标签: kdb
用简单的英语我会解释为: 通过应用带有值 r 的附加/逗号函数,在所有 () 索引处修改表 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-arg]
表示索引处的 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
【讨论】:
. 在这种情况下意味着将, 应用于t 和r。 r 在每次调用时全局更新,并包含 sym 收到的最后一个值。 :: 在大多数情况下分配给全局。
code.kx.com详细描述.函数
【讨论】: