2013-03-29 2 views
3

Оператор . в простейшей форме используется для индексации списка. Как вы объясните его использование на английском языке в этом коде?KDB '.' оператор

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

Я также не понимаю пустой список и оператор :: в этой строке, но, возможно, они будут иметь смысл после этого. очищается.

ответ

6

На простом английском языке, я бы это объяснить, как: изменить таблицу т на всех() индексов, применяя функцию Append/запятая со значением р.

Сначала рассмотрим несколько простых случаев @:

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 
1

. В этом случае применяются , до t и r. r глобально обновляется по каждому вызову и содержит последние значения, полученные по sym. :: - это присвоение глобальному в большинстве случаев.

code.kx.com описывают . функцию в больших деталях

+0

перечитываю ссылку code.cx.com, я не вижу, каким образом. могут применяться к t и r. Второе использование в справочной странице code.cx упоминает функции переменной валентности, но я не вижу, какая функция может быть. И какой смысл использовать пустой список '()'? –

+0

Вы должны следовать ссылке «Функциональные формы изменения» в разделе «См. Также» в ссылке для «.». – pamphlet