Articulo de referencia

Puro (lenguaje de programación)

Pure , sucesor del lenguaje ecuacional Q , es un lenguaje de programación funcional con tipado dinámico basado en la reescritura de términos . Ofrece sintaxis de operadores defi...

Pure , sucesor del lenguaje ecuacional Q , es un lenguaje de programación funcional con tipado dinámico basado en la reescritura de términos . Ofrece sintaxis de operadores definida por el usuario , macros , aritmética de precisión arbitraria (números de precisión múltiple) y compilación a código nativo mediante LLVM . Pure es software libre y de código abierto, distribuido (principalmente) bajo la Licencia Pública General Reducida de GNU versión 3 o posterior.

Descripción general

Pure incluye un intérprete y un depurador , ofrece gestión automática de memoria , posee potentes capacidades de programación funcional y simbólica, e interfaces con bibliotecas en C (por ejemplo, para operaciones numéricas, protocolos de bajo nivel y otras tareas similares). Además, Pure es un lenguaje pequeño diseñado desde cero; su intérprete no es grande y los módulos de la biblioteca están escritos en Pure. La sintaxis de Pure se asemeja a la de Miranda y Haskell , pero es un lenguaje de formato libre y, por lo tanto, utiliza delimitadores explícitos (en lugar de sangrías de reglas ) para indicar la estructura del programa.

El lenguaje Pure es sucesor del lenguaje de programación ecuacional Q, [ 1 ] creado previamente por el mismo autor, Albert Gräf, en la Universidad de Maguncia , Alemania. En comparación con Q, ofrece algunas características nuevas importantes (como funciones locales con ámbito léxico , soporte eficiente para vectores y matrices, y la interfaz C integrada) y los programas se ejecutan mucho más rápido, ya que se compilan justo a tiempo a código nativo sobre la marcha. Pure está dirigido principalmente a aplicaciones matemáticas y computación científica , pero su entorno de intérprete interactivo, la interfaz C y el creciente conjunto de módulos adicionales lo hacen adecuado para una variedad de otros usos, como inteligencia artificial , computación simbólica, [ 2 ] y procesamiento multimedia en tiempo real [ 3 ].

Existen complementos Pure para la hoja de cálculo Gnumeric y el software multimedia gráfico Pure Data de Miller Puckette , que permiten ampliar estos programas con funciones escritas en el lenguaje Pure. También se proporcionan interfaces como módulos de biblioteca para GNU Octave , OpenCV , OpenGL , la Biblioteca Científica GNU , FAUST , SuperCollider y liblo (para Open Sound Control (OSC)).

Ejemplos

Los números de Fibonacci (versión ingenua):

fib 0 = 0 ; fib 1 = 1 ; fib n = fib ( n - 2 ) + fib ( n - 1 ) si n > 1 ;

Versión mejorada ( recursiva de cola y de tiempo lineal ):

fib n = fibs ( 0 , 1 ) n con fibs ( a , b ) n = si n <= 0 entonces a sino fibs ( b , a + b ) ( n - 1 ); fin ;

Calcula los primeros 20 números de Fibonacci:

map fib ( 1..20 );

Un algoritmo para el problema de las n reinas que emplea una comprensión de listas para organizar la búsqueda con retroceso:

reinas n = buscar n 1 [] con buscar n i p = [ invertir p ] si i > n ; = cat [ buscar n ( i + 1 ) (( i , j ) : p ) | j = 1. . n ; seguro ( i , j ) p ]; seguro ( i , j ) p = ~ cualquier ( comprobar ( i , j )) p ; comprobar ( i1 , j1 ) ( i2 , j2 ) = i1 == i2 || j1 == j2 || i1 + j1 == i2 + j2 || i1 - j1 == i2 - j2 ; fin ;

Si bien Pure utiliza la evaluación estricta por defecto, también admite estructuras de datos perezosas como flujos ( listas perezosas ). Por ejemplo, el algoritmo de David Turner [ 4 ] para calcular el flujo de números primos mediante división por tanteo se puede expresar en Pure:

primos = criba ( 2. . inf ) con criba ( p : qs ) = p : criba [ q | q = qs ; q mod p ] & ; fin ;

El uso del &operador convierte la cola de la criba en una función diferida para retrasar su cálculo. La función diferida se evalúa implícitamente y luego se memoriza (utilizando la evaluación por necesidad ) cuando se accede a la parte correspondiente de la lista, por ejemplo:

primos !! ( 0..99 ); // produce los primeros 100 primos

Pure ofrece un soporte eficiente para vectores y matrices (similar al de MATLAB y GNU Octave ), incluyendo comprensiones de vectores y matrices.

Los espacios de nombres, los tipos y las interfaces forman parte del repertorio estándar:

nonfix nil ; tipo bintree nil | bintree ( bin x izquierda derecha );outfix « » ; namespace foo ( « » ); infixr ( ::^ ) ^ ; x ^ y = 2 * x + y ; namespace ;Interfaz pila con push s :: pila x ; pop s :: pila ; cima s :: pila ; fin ;tipo pila [];push xs @ [] x | push xs @ ( _:_ ) x = x : xs ; pop ( x : xs ) = xs ; top ( x : xs ) = x ;

Como lenguaje basado en la reescritura de términos , Pure admite completamente la computación simbólica con expresiones. Aquí hay un ejemplo que muestra el uso de reglas de reescritura locales para expandir y factorizar expresiones aritméticas simples:

expandir = reducir con ( a + b ) * c = a * c + b * c ; a * ( b + c ) = a * b + a * c ; fin ;factor = reducir con a * c + b * c = ( a + b ) * c ; a * b + a * c = a * ( b + c ); fin ;expandir (( a + b ) * 2 ); // produce a*2+b*2 factorizar ( a * 2 + b * 2 ); // produce (a+b)*2

Llamar a funciones de C desde Pure es muy fácil. Por ejemplo, para un programa "Hola, mundo!" , lo siguiente importa la putsfunción de la biblioteca de C y la usa para imprimir la cadena "Hello, world!"en la terminal:

extern int puts ( char * ); hello = puts "¡Hola, mundo!" ; hello ;

En lugar de compilar manualmente los archivos fuente a módulos de bitcode de LLVM, también se puede colocar el código fuente en un script Pure, encerrándolo entre  %< ...  %> (código en línea, por ejemplo, C, Fortran 77/90, etc.).

Véase también

Referencias

  • Albert Gräf. "Procesamiento de señales en lenguaje de programación puro". Linux Audio Conference 2009 .
  • Michael Riepe. "Pure – eine einfache funktionale Sprache" Archivado el 19 de marzo de 2011 en Wayback Machine . Heise .
  • "Entrevista a Albert Gräf" . azulparen.
  • Mark Boady, Introducción a los sistemas de reescritura de términos y sus aplicaciones

Notas

  1. Lenguaje de programación ecuacional Q https://q-lang.sourceforge.net/
  2. "Proyectos relacionados con REDUCE" . Sistema de álgebra computacional REDUCE . Consultado el 19 de enero de 2025 .
  3. FAUST https://faust.grame.fr/ .
  4. Turner, David A. Manual del idioma SASL. Informe técnico CS/75/1. Departamento de Ciencias Computacionales, Universidad de St. Andrews, 1975.
  • Sitio web oficial
  • Puro en Github
  • El manual puro (html)
  • Manual de la biblioteca Pure (html)
  • Descripción general de la documentación (html)
  • Álgebra computacional con Pure: una interfaz Reduce
  • Referencia rápida pura
  • Uso del intérprete puro
  • Usando Pure con TeXmacs
  • El complemento Pure TeXmacs