。 _ 最简单形式的运算符用于索引列表。你会如何解释它在这段代码中的英文用法?
if[x~"last";upd:{[t;x].[t;();,;r::select by sym from x]}]
我也不理解这一行中的空列表和 :: 运算符,但也许一旦 . 被清除。
用简单的英语,我将其解释为:通过应用带有值 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
如您所见,格式为 @[dataStructure; 指数;功能; 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详细描述.
功能