El lenguaje de programación Joy en ciencias de la computación es un lenguaje de programación puramente funcional que fue producido por Manfred von Thun de la Universidad La Trobe en Melbourne , Australia . La alegría se basa en la composición de funciones más que en el cálculo lambda . Ha resultado tener muchas similitudes con Forth , no debido al diseño, sino a una especie de evolución y convergencia paralelas. También se inspiró en el estilo de programación a nivel de la función de John Backus 's FP . [1]
Paradigma | multi-paradigma : funcional , concateativo , orientado a la pila |
---|---|
Diseñada por | Manfred von Thun |
Desarrollador | Manfred von Thun John Cowan |
Apareció por primera vez | 2001 |
Lanzamiento estable | 17 de marzo de 2003/17 de marzo de 2003 |
Disciplina de mecanografía | fuerte , dinámico |
Implementaciones importantes | |
Joy0, Joy1, "Joy actual", "Joy de John Cowan", "JoyJ (Joy in jvmm)" | |
Influenciado por | |
Esquema , FP , Cuarto | |
Influenciado | |
Factor , gato , V, Trith |
Cómo funciona
Joy es inusual (a excepción de los lenguajes de programación a nivel de función y algunos esotéricos, como unlambda ) por su falta de un operador lambda y, por lo tanto, por su falta de parámetros formales . Para ilustrar esto con un ejemplo común, así es como la función cuadrada podría definirse en un lenguaje de programación imperativo ( C ):
int cuadrado ( int x ) { retorno x * x ; }
La variable x es un parámetro que se reemplaza por el argumento que se eleva al cuadrado cuando se llama a la función.
En un lenguaje funcional ( Esquema ), se podría definir la misma función:
( definir cuadrado ( lambda ( x ) ( * x x )))
Esto es diferente en muchos aspectos, pero aún usa el parámetro x de la misma manera.
En Joy, la función cuadrada se define:
DEFINIR cuadrado == dup *.
En Joy, todo es una función que toma una pila como argumento y devuelve una pila como resultado. Por ejemplo, el número '5' no representa una constante entera, sino un programa corto que empuja el número 5 a la pila.
- El operador dup simplemente duplica el elemento superior de la pila presionando una copia de él.
- El operador * saca dos números de la pila y empuja su producto.
Entonces, la función cuadrado hace una copia del elemento superior y luego multiplica los dos elementos superiores de la pila, dejando el cuadrado del elemento superior original en la parte superior de la pila, sin necesidad de un parámetro formal. Esto hace que Joy sea conciso, como lo ilustra esta definición de ordenación rápida :
DEFINIR qsort == [pequeña] [] [desaconseja [>] dividir] [enconcat] binrec.
"binrec" es uno de los muchos combinadores recursivos de Joy , que implementa la recursividad binaria. Espera cuatro programas citados en la parte superior de la pila que representan:
- la condición de terminación (si una lista es "pequeña" (1 o 0 elementos) ya está ordenada),
- qué hacer si se cumple la condición de rescisión (en este caso, nada),
- qué hacer por defecto (dividir la lista en dos mitades comparando cada elemento con el pivote), y finalmente
- qué hacer al final (inserte el pivote entre las dos mitades ordenadas).
Pureza matemática
En la alegría, la función significa es un homomorfismo de la sintáctica monoid sobre la semántica monoid . Es decir, la relación sintáctica de concatenación de símbolos se asigna directamente a la relación semántica de composición de funciones . Es un homomorfismo más que un isomorfismo , porque es sobre pero no uno a uno ; es decir, ningún símbolo tiene más de un significado, pero algunas secuencias de símbolos tienen el mismo significado (por ejemplo, "dup +" y "2 *").
Joy es un lenguaje de programación concateativo : "La concatenación de dos programas denota la composición de las funciones denotadas por los dos programas". [2]
Sus rutinas de biblioteca reflejan las de ISO C , aunque la implementación actual no es fácilmente extensible con funciones escritas en C.
Ver también
- RPL
- Lenguaje de programación concatenativo
Referencias
- ^ Manfred von Thun (12 de diciembre de 2003). "Una conversación con Manfred von Thun" . Consultado el 31 de mayo de 2013 .
A principios de la década de 1980 me encontré con el famoso artículo de Backus "¿Se puede liberar la programación del estilo von Neumann?", E inmediatamente me intrigó el nivel más alto de programación en su FP.
- ^ "Fundamentos matemáticos de la alegría" . Archivado desde el original el 7 de octubre de 2011.
enlaces externos
- Sitio web oficial del lenguaje de programación Joy (Universidad La Trobe)
- Espejo de la página de inicio de Joy
- Recopilación informativa recopilada sobre Joy
- Joy inmediatamente ejecutable (GitHub-Archiv)
- Freneger, Paul (agosto de 2003). "La ALEGRÍA de adelante" . Avisos ACM SIGPLAN . 38 (8).
- von Thun, Manfred ; Thomas, Reuben (9 de octubre de 2001). "Alegría: primo funcional de Forth" (PDF) . Actas de la 17ª Conferencia EuroForth .
- Christopher Diggins (31 de diciembre de 2008). "Qué es un lenguaje concatenativo" . Dr. Dobbs.
- Apter, Stevan. "Programación funcional en Joy y K" . Vector . Archivado desde el original el 28 de agosto de 2008 . Consultado el 28 de febrero de 2011 .
- mjoy, un intérprete en Delphi para dibujo a máquina (Subconjunto de Joy)