Использование apply (@) для создания вектора sym вручную в kdb - PullRequest
0 голосов
/ 18 апреля 2020

Ссылка: https://code.kx.com/q4m3/14_Introduction_to_Kdb+/#1422 -splayed-tables-with-symbol-columns

При выполнении перечисления вручную кто-нибудь может объяснить, как создается вектор sym с использованием @ в приведенном ниже примере ?

Пример:
Я открыл новый экземпляр q:

q)t:([] s1:`a`b`c; v:10 20 30; s2:`x`y`z)
q)@[t;exec c from meta t where "s"=t;`sym?] /- Creates a sym vector in memory
q)sym
/- Output - `a`b`c`x`y`z
q)type sym
/- Output - 11h

EDIT-
Понятно, что apply at выполняет работу, он равен для обновления списка, используя применить на. Например:

q)l:2 3 9
q)@[l;1;neg]
2 -3 9

Точно так же мы применяем расширение enum к вектору sym, основываясь на условии как второй аргумент, т.е. все столбцы sym таблицы t

@[t;exec c from meta t where t="s";`sym?]

1 Ответ

3 голосов
/ 19 апреля 2020

Оператор @ (изменить) - это не то, что генерирует вектор `sym, а ? (Enum Extend) оператор, который это делает.

@ выше применяет `sym? ко всем столбцам t, которые являются символами. Вместо этого вы можете применить его непосредственно самостоятельно и сгенерировать `sym:

q)show t:([] s1:`a`b`c; v:10 20 30; s2:`x`y`z)
s1 v  s2
--------
a  10 x
b  20 y
c  30 z
q)sym
'sym
  [0]  sym
       ^
q)`sym?t`s1
`sym$`a`b`c
q)sym
`a`b`c
q)`sym?t`s2
`sym$`x`y`z
q)sym
`a`b`c`x`y`z

`sym, который создается при первом вызове функции и продолжает расширяться при каждом ее повторном вызове.

...