Q (язык программирования от Kx Systems) - Q (programming language from Kx Systems)
Парадигма | Множество, функциональный |
---|---|
Разработано | Артур Уитни |
Разработчик | Kx Systems |
Впервые появился | 2003[1] |
Стабильный выпуск | 4.0 / 17 марта 2020 г.[2] |
Печатная дисциплина | Динамический, сильный |
Интернет сайт | код |
Под влиянием | |
А +, APL, Схема, k |
Q это язык программирования за множество обработка, разработанная Артур Уитни. это проприетарное программное обеспечение, коммерциализируется Kx Systems. Q служит языком запросов для kdb +, диск на основе и в памяти, на основе столбца база данных. Kdb + основан на языке k, краткий вариант языка APL. Q - это тонкая оболочка вокруг k, обеспечивающая более читаемый интерфейс, похожий на английский.[3]
Обзор
Основные строительные блоки q: атомы, списки, и функции. Атомы скаляры и включить типы данных числовые, символьные, дата и время. Списки упорядоченные коллекции атомов (или другие списки), на которых структуры данных более высокого уровня словари и столы сконструированы внутри. Словарь - это карта списка ключей к списку значений. Таблица - это транспонированный словарь символьных ключей и списков (столбцов) одинаковой длины в качестве значений. А таблица с ключами, аналогично таблице с первичный ключ на нем размещен словарь, в котором ключи и значения расположены в виде двух таблиц.
Следующий код демонстрирует отношения структур данных. Выражения для оценки появляются с префиксом q)
приглашение, с выводом оценки, показанным ниже:
q) `john / атом типа symbol`johnq) 50 / атом типа integer50q)` john`jack / список символов`john`jackq) 50 60 / список целых чисел50 60q) `john`jack! 50 60 / список символов и список целых чисел, объединенных в словарьjohn | 50jack | 60q) `name`age! (` John`jack; 50 60) / расположение, называемое именем словаря столбца | джон джекедж | 50 60q) flip `name`age! (` John`jack; 50 60) / при транспонировании с помощью функции "flip" словарь столбца становится возрастом имени таблицы -------- john 50jack 60q) (flip ( enlist `name)! enlist` john`jack)! flip (enlist `age)! enlist 50 60 / две таблицы равной длины, объединенные как словарь, становятся ключевыми таблицами name | возраст ---- | --- Джон | 50jack | 60
Этими сущностями управляют с помощью функций, которые включают встроенные функции, поставляемые с Q (которые определены как K макросы) и пользовательские функции. Функции - это тип данных, которые можно помещать в списки, словари и таблицы или передавать другим функциям в качестве параметров.
Примеры
Как и K, Q интерпретируется, и результат вычисления выражения отображается немедленно, если он не оканчивается точкой с запятой. В Привет, мир программа таким образом тривиальна:
q) «Привет, мир!» «Привет, мир!»
Следующее выражение сортирует список строк, хранящихся в переменной x, по убыванию их длины:
x @ idesc подсчитать каждый x
Выражение оценивается справа налево следующим образом:
- "count each x" возвращает длину каждого слова в списке x.
- "idesc" возвращает индексы, с помощью которых можно сортировать список значений в порядке убывания.
- @ используйте целые числа справа для индексации исходного списка строк.
Факториальная функция может быть реализована непосредственно в Q как
{prd 1+до Икс}
или рекурсивно как
{$[Икс=0;1;Икс*.z.s[Икс-1]]}
Обратите внимание, что в обоих случаях функция неявно принимает один аргумент с именем x - как правило, можно использовать до трех неявных аргументов с именами x, y и z или явно задавать привязки локальных переменных аргументов.
В прямой реализации выражение «til x» перечисляет целые числа от 0 до x-1, «1+» добавляет 1 к каждому элементу списка, а «prd» возвращает результат списка.
В рекурсивной реализации синтаксис «$ [условие; expr1; expr2]» является тернарным условным выражением - если условие истинно, то возвращается expr1; в противном случае возвращается expr2. Выражение ".z.s" в общих чертах эквивалентно 'this' в Java или 'self' в Python - это ссылка на содержащий объект и позволяет функциям в q вызывать себя.
Когда x является целым числом больше 2, следующая функция вернет 1, если это простое число, в противном случае - 0:
{мин Икс мод 2_til Икс}
Функция оценивается справа налево:
- «til x» перечисляет неотрицательные целые числа меньше x.
- «2_» отбрасывает первые два элемента перечисления (0 и 1).
- «x mod» выполняет деление по модулю между исходным целым числом и каждым значением в усеченном списке.
- «min» найти минимальное значение списка результата по модулю.
Язык программирования q содержит собственный синтаксис табличного запроса, называемый qSQL, напоминающий традиционный SQL но имеет важные отличия, в основном из-за того, что базовые таблицы ориентированы по столбцам, а не по строкам.
q) показать t: ([] name: `john`jack`jill`jane; age: 50 60 50 20) / определить простую таблицу и присвоить« t »имя age -------- john 50jack 60jill 50янн 20
q)Выбрать из т куда имя подобно "я *",возраст>50
имя возраст -------- jack 60q)Выбрать ряды:считать я к возраст из т
возраст | строки --- | ---- 20 | 150 | 260 | 1
Рекомендации
- ^ «Язык Q, расширяющий привлекательность векторов». Архивировано 1 января 2007 года.. Получено 1 июня, 2016.CS1 maint: неподходящий URL (связь)
- ^ «Изменения в 4.0» (Пресс-релиз). Пало-Альто: Kx Systems. 17 марта 2020 г.. Получено 15 апреля, 2020.
- ^ «Справочная карта Q». Получено 15 апреля 2020.
дальнейшее чтение
- Боррор, Джеффри А. Q For Mortals: Учебник по программированию на языке Q. ISBN 978-1-4348-2901-6.
- Псарис, Ник. В: Быстрые, масштабируемые и удобные в обслуживании Kdb +. ISBN 978-9-8813-8990-9.
внешняя ссылка
- Официальный веб-сайт, Kx Systems
- Официальный веб-сайт, кдб +
- Электронная документация и сайт разработчика
- Онлайн-руководства по kdb
- qStudio - IDE с графиком таймсерий для kdb
- Kx Developer, IDE для kdb +
- kdb + репозитории на GitHub
- Бесплатная онлайн-версия Q для смертных
- Q для всех видео уроки
- Технические описания
- jq, реализация q на JVM