¿Qué es Qriollo?
Qriollo es un lenguaje de programación funcional, impuro, estricto, rioplatense y en joda.
El compilador de Qriollo está desarrollado en Haskell, tiene múltiples backends, y puede generar código C, código Python, y bytecode para la JVM. La implementación se encuentra en fase inestable/experimental y cuenta con una interfaz de funciones gringas.
Qriollo es un lenguaje estáticamente tipado, con inferencia de tipos, polimorfismo paramétrico y clases de tipos. Incorpora un sistema de módulos simple. Tiene las funcionalidades usuales de un lenguaje de programación de la familia de ML: tipos de datos algebraicos, análisis de casos por comparación de patrones, clausuras léxicas, optimización de invocaciones a la cola, referencias mutables y call/cc. El backend para C cuenta con un algoritmo de recolección de basura exacto y stop-and-copy.
Hola mundo programado en quriollo
enchufar Chamuyo
el programa es
escupir "Hola mundon"
Ejemplos
Elementos pares de una lista (para ejecutar interactivamente)
filtrar (la que dado x da x % 2# == 0#) [1#, 2#, 3#, 4#]
Calcular números primos (para compilar)
Primos.q
enchufar Chamuyo
el esPrimo
dado p
da nadie (esDivisor p) (2..p - 1)
el esDivisor
dados p d
da p % d == 0#
los primos
dado n
da filtrar esPrimo (2..n)
el programa es
escupir . mostrar . primos $ 1000#
$ qr Primos.q --c -o Primos.c
$ gcc -o Primos Primos.c -Wall
$ ./Primos
[2#, 3#, 5#, 7#, 11#, 13#, 17#, 19#, 23#, 29#, 31#, ...
Altura de un árbol binario
AB.q
enchufar Chamuyo
un Árbol de a es
bien Hoja a
bien Nodo a (Árbol de a) (Árbol de a)
el máximo
dados n m
si n > m da n
si no da m
la altura de Árbol de a en Numerito
dado (Hoja _) da 1
dado (Nodo _ a b) da 1 + máximo (altura a)
(altura b)
el programa es escupir . mostrar . altura $
Nodo 'a'
(Nodo 'b'
(Hoja 'c')
(Hoja 'd'))
(Nodo 'e'
(Hoja 'f')
(Hoja 'g'))
$ qr AB.q
3#
Clases de tipos
ClasesDeTipos.q
enchufar Chamuyo
cualidad Escalable para coso
el escalar de Numerito en coso en coso
boludo
encarnar Escalable para Numerito
el escalar dados n m da n * m
boludo
encarnar Escalable para [coso,] con Escalable para coso
el escalar es fap . escalar
boludo
el programa es escupir . mostrar $
escalar 2 [[1#, 2#, 3#],
[4#, 5#, 6#],
[7#, 8#, 9#]]
$ qr ClasesDeTipos.q
[[2#, 4#, 6#], [8#, 10#, 12#], [14#, 16#, 18#]]
Historia
Qriollo sigue una larga tradición de lenguajes rioplatenses:
CHORONGOL '67 – Juan Carlos Turing
Visual Gómez 1.0 – Simon Peyton Gómez
salchicha++ – el Yoni Backus y la turra Lovelace
Pagina oficial
Si te gusto mi post compartelo con amigos y en tus redes sociales y no te olvides de seguirme en @valencchu para mas contenidos similares !