Ошибка неправильного типа при создании таблицы с символами с пробелами в kdb/q

Я пытаюсь создать таблицу символов в kdb, где значения таблицы имеют пробелы. у меня есть

tab:([colOne:`$"value 1"`$"value 2"]colTwo:`$"value 3"`$"value 4")

в настоящее время, но это просто возвращает

ERROR: `type (wrong type)

я следил за http://www.kdbfaq.com/kdb-faq/tag/sym-with-a-space


kdb
person ElFik    schedule 16.05.2013    source источник


Ответы (2)


Должно быть:

tab:([colOne:`$("value 1";"value 2")]colTwo:`$("value 3";"value 4"))

Помните, что вычисление в q выполняется слева направо:

colTwo:`$"value 3"`$"value 4"
`$"value 4" will be evaluated to symbol

Затем он попытается применить этот символ к тому, что слева:

"value 3" `$"value 4"

что даст вам 'type

person Sergey V    schedule 16.05.2013
comment
Не могли бы вы добавить объяснение? - person Trinimon; 16.05.2013
comment
полезное объяснение, спасибо. Я понимаю, что причина в `type, поэтому мне было любопытно попробовать (`$"value 3")`$"value 4" this however gives an error as `значение 3`. какое объяснение этому? - person ElFik; 17.05.2013
comment
он пытается найти функцию поиска с именем символа слева и вызвать ее с аргументом справа. Поскольку у вас нет функции с определенным значением имени 3 - это говорит вам именно об этом. a:{show 123}; `a `b - person Sergey V; 19.05.2013

вы правы насчет sym с пробелом, но при создании столбцов таблицы в качестве входных данных используются списки.

tab:([colOne:`a`b]colTwo:`c`d)

было бы хорошо, так как `a`b - это список, но при использовании syms с пробелами вам нужно заключить их в (), чтобы составить список.

ниже также будет работать, хотя ответ Сергея - лучший способ сделать это.

tab:([colOne:(`$"value 1";`$"value 2")]colTwo:(`$"value 3";`$"value 4"))
person Naveen Sharma    schedule 17.05.2013