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 basada en columnas , en memoria y en disco . Kdb + se basa en el lenguaje k , una variante concisa del lenguaje APL . Q es una envoltura delgada alrededor de k, que proporciona una interfaz similar al inglés más legible. [3]
Paradigma | Matriz , funcional |
---|---|
Diseñada por | Arthur Whitney |
Desarrollador | Sistemas Kx |
Apareció por primera vez | 2003 [1] |
Lanzamiento estable | 4.0 / 17 de marzo de 2020 [2] |
Disciplina de mecanografía | Dinámico , fuerte |
Sitio web | código |
Influenciado por | |
A + , APL , esquema , k |
Descripción general
Los bloques de construcción fundamentales de q son átomos , listas y 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 que se construyen internamente los diccionarios y tablas de estructuras de datos de nivel superior . Un diccionario es un mapa de una lista de claves a una lista de valores. Una tabla es un diccionario transpuesto de claves de símbolos y listas (columnas) de igual longitud como valores. Una tabla con clave , análoga a una tabla con una clave primaria colocada en ella, es un diccionario donde las claves y los valores se organizan como dos tablas.
El siguiente código demuestra las relaciones de las estructuras de datos. Las expresiones para evaluar aparecen con el prefijo de la q)
solicitud, y el resultado de la evaluación se muestra a continuación:
q) `john / un átomo de tipo símboloJuanq) 50 / un átomo de tipo entero50q) `john`jack / una lista de símbolos`John`jackq) 50 60 / una lista de números enteros50 60q) `john`jack! 50 60 / una lista de símbolos y una lista de números enteros combinados para formar un diccionariojohn | 50jack | 60q) `name`age! (` john`jack; 50 60) / un arreglo denominado diccionario de columnasnombre | john jackedad | 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 tablanombre Edad--------juan 50gato 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 clavesnombre | edad---- | ---john | 50jack | 60
Estas entidades se manipulan mediante funciones, que incluyen las funciones integradas que vienen con Q (que se definen como macros K ) y funciones definidas por el usuario. Las funciones son un tipo de datos y se pueden colocar en listas, diccionarios y tablas, o pasar a otras funciones como parámetros.
Ejemplos de
Como 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. El programa Hola mundo es, por tanto, trivial:
q) "¡Hola mundo!""¡Hola Mundo!"
La siguiente expresión ordena una lista de cadenas almacenadas en la variable x descendiendo por sus longitudes:
x @ idesc contar cada x
La expresión se evalúa de derecha a izquierda de la siguiente manera:
- "contar cada 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.
- @ usa los valores enteros a la derecha para indexar en 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 *. z . s [ x - 1 ]]}
Tenga en cuenta que en ambos casos, la función toma implícitamente un solo argumento llamado x; en general, es posible usar hasta tres argumentos implícitos, llamados x, y y z, o dar a los argumentos enlaces de variables locales explícitamente.
En la implementación directa, la expresión "til x" enumera los números enteros de 0 a x-1, "1+" agrega 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 un condicional ternario; si la condición es verdadera, se devuelve expr1; de lo contrario, se devuelve expr2. La expresión ".zs" es vagamente 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, de lo contrario 0:
{ min x mod 2 _til x }
La función se evalúa de derecha a izquierda:
- "til 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 de módulo entre el entero original y cada valor en la lista truncada.
- "min" encuentra el valor mínimo de la lista de resultado de módulo.
El lenguaje de programación q contiene su propia sintaxis de consulta de tabla llamada qSQL , que se parece al SQL tradicional pero tiene diferencias importantes, principalmente debido al hecho de que las tablas subyacentes están orientadas por columna, en lugar de por fila.
q) mostrar t: ([] nombre: `john`jack`jill`jane; edad: 50 60 50 20) / definir una tabla simple y asignarla a" t "nombre Edad--------juan 50gato 60jill 50jane 20
q)select from t where name like "ja*",age>50
nombre Edad--------gato 60q)select rows:count i by age from t
edad | filas--- | ----20 | 150 | 260 | 1
Referencias
- ^ "Lenguaje Q ampliando el atractivo de los vectores" . Archivado desde el original el 1 de enero de 2007 . Consultado el 1 de junio de 2016 .CS1 maint: URL no apta ( enlace )
- ^ "Cambios en 4.0" (Comunicado de prensa). Palo Alto: Kx Systems. 17 de marzo de 2020 . Consultado el 15 de abril de 2020 .
- ^ "Tarjeta de referencia Q" . Consultado el 15 de abril de 2020 .
Otras lecturas
enlaces externos
- Sitio web oficial , Kx Systems
- Sitio web oficial , kdb +
- Documentación en línea y sitio para desarrolladores
- Tutoriales de kdb en línea
- qStudio un IDE con gráficos de series de tiempo para kdb
- Kx Developer, un IDE para kdb +
- repositorios kdb + en GitHub
- Versión online gratuita de Q for Mortals
- Video tutoriales de Q para todos
- Documentos técnicos
- jq, una implementación de q en la JVM