Jump to content

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

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

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

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

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

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

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

Ссылки [ править ]

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

Дальнейшее чтение [ править ]

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

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: c103a038d2892abc6a21598b39603941__1708151520
URL1:https://arc.ask3.ru/arc/aa/c1/41/c103a038d2892abc6a21598b39603941.html
Заголовок, (Title) документа по адресу, URL1:
Q (programming language from Kx Systems) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)