Q (язык программирования от Kx Systems) - Q (programming language from Kx Systems)

q
ПарадигмаМножество, функциональный
РазработаноАртур Уитни
РазработчикKx Systems
Впервые появился2003[1]
Стабильный выпуск
4.0 / 17 марта 2020 г.; 7 месяцев назад (2020-03-17)[2]
Печатная дисциплинаДинамический, сильный
Интернет сайткод.kx.com
Под влиянием
А +, 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

Выражение оценивается справа налево следующим образом:

  1. "count each x" возвращает длину каждого слова в списке x.
  2. "idesc" возвращает индексы, с помощью которых можно сортировать список значений в порядке убывания.
  3. @ используйте целые числа справа для индексации исходного списка строк.

Факториальная функция может быть реализована непосредственно в 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 Икс}

Функция оценивается справа налево:

  1. «til x» перечисляет неотрицательные целые числа меньше x.
  2. «2_» отбрасывает первые два элемента перечисления (0 и 1).
  3. «x mod» выполняет деление по модулю между исходным целым числом и каждым значением в усеченном списке.
  4. «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

Рекомендации

  1. ^ «Язык Q, расширяющий привлекательность векторов». Архивировано 1 января 2007 года.. Получено 1 июня, 2016.CS1 maint: неподходящий URL (связь)
  2. ^ «Изменения в 4.0» (Пресс-релиз). Пало-Альто: Kx Systems. 17 марта 2020 г.. Получено 15 апреля, 2020.
  3. ^ «Справочная карта Q». Получено 15 апреля 2020.

дальнейшее чтение

  • Боррор, Джеффри А. Q For Mortals: Учебник по программированию на языке Q. ISBN  978-1-4348-2901-6.
  • Псарис, Ник. В: Быстрые, масштабируемые и удобные в обслуживании Kdb +. ISBN  978-9-8813-8990-9.

внешняя ссылка