Q (язык программирования от Kx Systems)
Парадигма | Массив , функционал |
---|---|
Разработано | Артур Уитни |
Разработчик | Кх Системы |
Впервые появился | 2003 [1] |
Стабильная версия | 4.0
/ 17 марта 2020 г [2] |
Дисциплина набора текста | Динамичный , сильный |
Веб-сайт | код |
Под влиянием | |
A+ , APL , Схема , k |
Q — язык программирования для обработки массивов , разработанный Артуром Уитни . Это проприетарное программное обеспечение , коммерциализированное компанией Kx Systems . Q служит языком запросов для kdb+ на диске и в памяти , основанной на столбцах , базы данных . Kdb+ основан на языке k , кратком варианте языка APL . Q — это тонкая оболочка k, обеспечивающая более читабельный интерфейс, похожий на английский. Одним из вариантов использования является анализ финансовых временных рядов, поскольку можно получить неточные временные совпадения. Примером может служить сопоставление бида и аска до этого. Обе временные метки немного отличаются и в любом случае совпадают. [3]
Обзор [ править ]
Фундаментальными строительными блоками q являются атомы , списки и функции . Атомы являются скалярами и включают числовые типы данных , символьные, дату и время. Списки представляют собой упорядоченные коллекции атомов (или других списков), на основе которых словари и таблицы внутри создаются структур данных более высокого уровня. Словарь — это отображение списка ключей на список значений. Таблица представляет собой транспонированный словарь символьных ключей и списков (столбцов) одинаковой длины в качестве значений. Таблица с ключами , аналогичная таблице с помещенным в нее первичным ключом , представляет собой словарь, в котором ключи и значения расположены в виде двух таблиц.
Следующий код демонстрирует связи структур данных. Выражения для оценки появляются с префиксом q)
подсказка, результаты оценки показаны ниже:
q)`john / an atom of type symbol
`john
q)50 / an atom of type integer
50
q)`john`jack / a list of symbols
`john`jack
q)50 60 / a list of integers
50 60
q)`john`jack!50 60 / a list of symbols and a list of integers combined to form a dictionary
john| 50
jack| 60
q)`name`age!(`john`jack;50 60) / an arrangement termed a column dictionary
name| john jack
age | 50 60
q)flip `name`age!(`john`jack;50 60) / when transposed via the function "flip", the column dictionary becomes a table
name age
--------
john 50
jack 60
q)(flip (enlist `name)!enlist `john`jack)!flip (enlist `age)!enlist 50 60 / two equal length tables combined as a dictionary become a keyed table
name| age
----| ---
john| 50
jack| 60
Этими сущностями управляют с помощью функций, которые включают в себя встроенные функции, поставляемые с Q (которые определяются как макросы K ), и определяемые пользователем функции. Функции представляют собой тип данных и могут быть помещены в списки, словари и таблицы или переданы другим функциям в качестве параметров.
Примеры [ править ]
Как и K, Q интерпретируется, и результат вычисления выражения отображается немедленно, если не завершается точкой с запятой. Таким образом, программа Hello world тривиальна:
q)"Hello world!"
"Hello world!"
Следующее выражение сортирует список строк, хранящихся в переменной x, по убыванию их длины:
x@idesc count each x
Выражение вычисляется справа налево следующим образом:
- «counteach x» возвращает длину каждого слова в списке x.
- «idesc» возвращает индексы, которые будут сортировать список значений в порядке убывания.
- @ используйте целочисленные значения справа для индексации исходного списка строк.
Функция факториала может быть реализована непосредственно в Q как
{prd 1+til x}
или рекурсивно как
{$[x=0;1;x*.z.s[x-1]]}
Обратите внимание, что в обоих случаях функция неявно принимает один аргумент с именем x - как правило, можно использовать до трех неявных аргументов с именами x, y и z или явно задавать аргументам привязки к локальным переменным.
В прямой реализации выражение «til x» перечисляет целые числа от 0 до x-1, «1+» добавляет 1 к каждому элементу списка, а «prd» возвращает произведение списка.
В рекурсивной реализации синтаксис «$[условие; выражение1; выражение2]» является троичным условием — если условие истинно, то возвращается выражение1; в противном случае возвращается выражение2. Выражение «.zs» во многом эквивалентно «this» в Java или «self» в Python — оно является ссылкой на содержащий объект и позволяет функциям в q вызывать самих себя.
Если x — целое число больше 2, следующая функция вернет 1, если оно простое, в противном случае — 0:
{min x mod 2_til x}
Функция вычисляется справа налево:
- «til x» перечисляет неотрицательные целые числа меньше x.
- «2_» удаляет первые два элемента перечисления (0 и 1).
- «x mod» выполняет деление по модулю между исходным целым числом и каждым значением в усеченном списке.
- «min» найти минимальное значение списка результатов по модулю.
Язык программирования q содержит собственный синтаксис запросов к таблицам, называемый qSQL , который напоминает традиционный SQL , но имеет важные отличия, в основном из-за того, что базовые таблицы ориентированы по столбцам, а не по строкам.
q)show t:([] name:`john`jack`jill`jane; age: 50 60 50 20) / define a simple table and assign to "t"
name age
--------
john 50
jack 60
jill 50
jane 20
q)select from t where name like "ja*",age>50
name age
--------
jack 60
q)select rows:count i by age from t
age| rows
---| ----
20 | 1
50 | 2
60 | 1
Ссылки [ править ]
- ^ «Язык Q расширяет привлекательность векторов» . Архивировано из оригинала 1 января 2007 года . Проверено 1 июня 2016 г.
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка ) - ^ «Изменения в 4.0» (Пресс-релиз). Пало-Альто: Kx Systems. 17 марта 2020 г. Проверено 15 апреля 2020 г.
- ^ «Справочная карта Q» . Проверено 15 апреля 2020 г.
Дальнейшее чтение [ править ]
- Боррор, Джеффри А. Q Для смертных: Учебник по программированию на Q. ISBN 978-1-4348-2901-6 .
- Псарис, Ник. Q-советы: быстрый, масштабируемый и удобный в обслуживании Kdb+ . ISBN 978-9-8813-8990-9 .
Внешние ссылки [ править ]
- Официальный сайт , Кх Системс
- Официальный сайт , КДБ+
- Интернет-документация и сайт разработчика
- Онлайн-руководства по KDB
- qStudio - IDE с диаграммами временных рядов для kdb
- Kx Developer, IDE для kdb+
- Репозитории kdb+ на GitHub
- Бесплатная онлайн-версия Q для смертных
- Вопрос для всех видеоуроков
- Технические документы
- jq, реализация q на JVM