3

_ 最简单形式的运算符用于索引列表。你会如何解释它在这段代码中的英文用法?

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

我也不理解这一行中的空列表和 :: 运算符,但也许一旦 . 被清除。

4

2 回答 2

7

用简单的英语,我将其解释为:通过应用带有值 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
于 2013-03-30T10:31:34.137 回答
1

.在这种情况下,意味着适用,trr在每次调用时全局更新,并包含 . 收到的最后一个值sym::在大多数情况下分配给全局。

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

于 2013-03-29T16:22:54.310 回答