Q es un lenguaje de programación para el procesamiento de matrices , desarrollado por Arthur Whitney . Es un software propietario , comercializado por KX Systems . Q sirve como lenguaje de consulta para kdb+ , una base de datos columnar basada en disco y en memoria . Kdb+ se basa en el lenguaje k , una variante concisa del lenguaje APL . Q es una biblioteca de envoltura ligera alrededor de k, que proporciona una interfaz más legible, similar al inglés. Uno de los casos de uso es el análisis de series temporales financieras, ya que se pueden realizar coincidencias temporales inexactas. Un ejemplo es hacer coincidir una oferta de compra con la oferta de venta anterior. Ambas marcas de tiempo difieren ligeramente y, aun así, se hacen coincidir. [ 3 ]
Descripción general
Los bloques de construcción fundamentales de q son los átomos , las listas y las funciones . Los átomos son escalares e incluyen los tipos de datos numérico, carácter, fecha y hora. Las listas son colecciones ordenadas de átomos (u otras listas) sobre las cuales se construyen internamente las estructuras de datos de nivel superior: diccionarios y tablas . Un diccionario es una correspondencia entre una lista de claves y una lista de valores. Una tabla es un diccionario transpuesto con claves de símbolos y listas de igual longitud (columnas) como valores. Una tabla con clave , análoga a una tabla con una clave primaria , es un diccionario donde las claves y los valores se organizan como dos tablas.
El siguiente código muestra las relaciones entre las estructuras de datos. Las expresiones a evaluar aparecen precedidas por la q)indicación, y el resultado de la evaluación se muestra a continuación:
q) `john / un átomo de tipo símbolo `john q) 50 / un átomo de tipo entero 50q) `john`jack / una lista de símbolos `john`jack q) 50 60 / una lista de números enteros 50 60q) `john`jack ! 50 60 / una lista de símbolos y una lista de enteros combinados para formar un diccionario john | 50 jack | 60q) `nombre`edad ! ( `john`jack ; 50 60 ) / una disposición denominada diccionario de columnas nombre | john jack edad | 50 60q) flip `name`age ! ( `john`jack ; 50 60 ) / cuando se transpone mediante la función "flip", el diccionario de columnas se convierte en una tabla nombre edad -------- john 50 jack 60q) ( flip ( enlist `name ) ! enlist `john`jack ) ! flip ( enlist `age ) ! enlist 50 60 / dos tablas de igual longitud combinadas como un diccionario se convierten en una tabla con clave nombre | edad ----| --- john | 50 jack | 60Estas entidades se manipulan mediante funciones, que incluyen las funciones integradas de Q (definidas como macros K ) y funciones definidas por el usuario. Las funciones son un tipo de dato y pueden almacenarse en listas, diccionarios y tablas, o pasarse como parámetros a otras funciones.
Ejemplos
Al igual que K, Q se interpreta y el resultado de la evaluación de una expresión se muestra inmediatamente, a menos que termine con un punto y coma. Por lo tanto, el programa "¡Hola, mundo!" es trivial:
q) "¡Hola mundo!" "¡Hola mundo!"La siguiente expresión ordena una lista de cadenas almacenadas en la variable x de forma descendente según su longitud:
x @ idesc contar cada xLa expresión se evalúa de derecha a izquierda de la siguiente manera:
- "count each x" devuelve la longitud de cada palabra en la lista x.
- "idesc" devuelve los índices que ordenarían una lista de valores en orden descendente.
- @ utilice los valores enteros de la derecha para acceder a la lista original de cadenas.
La función factorial se puede implementar directamente en Q como
{ prd 1 + til x }o recursivamente como
{ $ [ x = 0 ; 1 ; x *. zs [ x - 1 ]]}Tenga en cuenta que en ambos casos la función toma implícitamente un único argumento llamado x; en general, es posible usar hasta tres argumentos implícitos, denominados x, y y z, o asignar explícitamente variables locales a los argumentos.
En la implementación directa, la expresión "til x" enumera los enteros desde 0 hasta x-1, "1+" suma 1 a cada elemento de la lista y "prd" devuelve el producto de la lista.
En la implementación recursiva, la sintaxis "$[condición; expr1; expr2]" es una condición ternaria: si la condición es verdadera, se devuelve expr1; de lo contrario, se devuelve expr2. La expresión ".zs" es aproximadamente equivalente a 'this' en Java o 'self' en Python; es una referencia al objeto contenedor y permite que las funciones en q se llamen a sí mismas.
Cuando x es un número entero mayor que 2, la siguiente función devolverá 1 si es primo, y 0 en caso contrario:
{ min x mod 2 _ til x }La función se evalúa de derecha a izquierda:
- "hasta x" enumera los enteros no negativos menores que x.
- "2_" elimina los dos primeros elementos de la enumeración (0 y 1).
- "x mod" realiza una división modular entre el entero original y cada valor de la lista truncada.
- "min" encuentra el valor mínimo de la lista de resultados del módulo.
El lenguaje de programación q contiene su propia sintaxis de consulta de tablas llamada qSQL , que se asemeja al SQL tradicional pero tiene diferencias importantes, principalmente debido a que las tablas subyacentes están orientadas por columnas, en lugar de por filas.
q) mostrar t : ([] nombre : `john`jack`jill`jane ; edad : 50 60 50 20 ) / define una tabla simple y asigna a "t" nombre edad -------- john 50 jack 60 jill 50 jane 20q ) seleccionar de t donde nombre como "ja*" , edad > 50 nombre edad -------- jack 60 q ) seleccionar filas : contar i por edad de t edad | filas ---| ---- 20 | 1 50 | 2 60 | 1Referencias
- ↑ "El lenguaje Q amplía el atractivo de los vectores" . Archivado del original el 1 de enero de 2007. Consultado el 1 de junio de 2016 .
- ↑ "Cambios en la versión 4.1" . KX Systems (Comunicado de prensa). Palo Alto. 13 de febrero de 2024. Consultado el 4 de septiembre de 2025 .
- ↑ "Tarjeta de referencia Q" . Consultado el 15 de abril de 2020 .
Lecturas adicionales
- Borror, Jeffry A. (26 de marzo de 2008). Q para mortales: un tutorial de programación en Q. Scotts Valley, California: CreateSpace. ISBN 978-1-4348-2901-6.y versión online gratuita .
- Psaris, Nick (19 de marzo de 2015). Q Tips: Kdb+ rápido, escalable y mantenible . Vector Sigma. ISBN 978-9-8813-8990-9.
Enlaces externos
- Sitio web oficial de KX Systems
- Sitio web oficial , kdb+
- kdb+ en GitHub , repositorios archivados el 19/10/2022 en Wayback Machine
- jq en GitHub , implementación de q en la JVM
- Documentación en línea y sitio web para desarrolladores
- Tutoriales de kdb en línea
- qStudio es un IDE con gráficos de series temporales para kdb.
- Kx Developer, un IDE para kdb+
- Tutoriales en vídeo de Q para todos
- Documentos técnicos
- Familia de lenguajes de programación APL
- lenguajes de programación de matrices
- Lenguajes de programación centrados en datos
- Lenguajes de programación dinámicos
- Lenguajes a nivel de función
- Sistemas de gestión de bases de datos propietarios