КДБ '.' оператор

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

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

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


kdb
person Robert Kubrick    schedule 29.03.2013    source источник


Ответы (2)


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

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

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-аргумент]

означает, что к 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
person John at TimeStored    schedule 30.03.2013

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

code.kx.com подробно описывает . функцию

person Sergey V    schedule 29.03.2013
comment
Я перечитал ссылку code.cx.com, я не понимаю, как . может применяться к t и r. Второе использование на справочной странице code.cx упоминает функции различной валентности, но я не понимаю, какой может быть функция t. И вообще, какая польза от пустого списка '()'? - person Robert Kubrick; 30.03.2013
comment
Вам необходимо перейти по ссылке «Функциональные формы изменений» в разделе «См. также» в справочнике по файлам . - person pamphlet; 09.07.2014