Lenguaje de programación Joy

Lenguaje de programación Joy

El Joy es un lenguaje de programación funcional que fue producido por Manfred von Thun de la Universidad de La Trobe en Melbourne, Australia. Joy está basado en la composición de funciones en vez del cálculo lambda. Ha resultado tener muchas semejanzas con el lenguaje Forth, debido menos al diseño que a una suerte de evolución paralela y convergente.

Contenido

Funcionamiento

Joy es inusual, (excepto para lenguajes para programación a nivel funcional y algunos cosas esotéricas), por su carencia de un operador lambda, y por lo tanto la carencia de parámetros formales. Para ilustrar esto con un ejemplo común, aquí está cómo la función square (elevar al cuadrado) puede ser definida en un lenguaje de programación imperativo (C):

int square(int x) {
  return x*x;
}

El variable x es un parámetro formal que es substituido por el valor real al que se le calculará el cuadrado cuando la función sea llamada. Ahora aquí está cómo la misma función sería definida en un lenguaje funcional (Scheme):

(define (square x)
  (* x x))

Esto es diferente en muchas formas, pero todavía utiliza el parámetro formal x de la misma manera. Ahora, aquí está cómo la función cuadrado pudiera ser definida en Joy:

DEFINE square == dup * .

Explicando el código de arriba: En Joy, todo es una función que toma una pila como argumento y retorna una pila como resultado. Por ejemplo, el número 5 no es, como puede parecer, una constante entera, sino que por el contrario es un corto programa que empuja (push) al número 5 sobre la pila.

  • El operador dup simplemente duplica el elemento superior de la pila empujando (push) una copia de este elemento.
  • El operador * extrae (pop) dos números de la pila y empuja (push) su producto.

Así que esta definición de la función cuadrado hace una copia del elemento superior y después multiplica los dos elementos superiores, dejando el cuadrado en el elemento superior original sobre de la pila. No hay necesidad de un parámetro formal en absoluto. Este diseño hace que el lenguaje Joy sea conciso y poderoso, según lo ilustrado por esta definición del quicksort:


 DEFINE qsort ==
   [small]
   []
   [uncons [>] split]
   [[swap] dip cons concat]
   binrec .

el binrec es uno de muchos combinadores recursivos de Joy, para implementar recursividad. binrec espera cuatro programas indicados en el tope de la pila que representan:

  • la condición de terminación, si una lista es "small" (pequeña) (de 1 ó 0 elementos) ya está ordenada,
  • qué hacer si se cumple la condición de la terminación (en este caso nada),
  • qué hacer por defecto (divide la lista en dos mitades comparando cada elemento con el pivote),
  • y finalmente qué a hacer al final (insertar el pivote entre las dos mitades clasificadas).

Pureza matemática

En Joy, el significado de una función es un homomorfismo desde el monoide sintáctico sobre el monoide semántico. Es decir, la relación sintáctica de la concatenación de símbolos mapea directamente sobre la relación semántica de la composición de funciones. Es un homomorfismo en vez de un isomorfismo porque está sobre pero uno a uno, es decir, algunas secuencias de símbolos tienen el mismo significado (ej. dup + y 2 *) pero ningún símbolo tiene más de un significado.

Joy maneja ser práctico y potencialmente útil, a diferencia del, de otra manera similar, Unlambda. Sus biblioteca de rutinas reflejan las del ISO C, aunque la implementación actual no es fácilmente extensible con las funciones escritas en C.

Véase también

Enlaces externos


Wikimedia foundation. 2010.

Игры ⚽ Поможем сделать НИР

Mira otros diccionarios:

  • Lenguaje de programación Joy — Manfred von Thun de Latrobe University en Melbourne, Australia ha producido y está refinando un lenguaje de programación funcional llamado Joy basado en la composición de funciones más que en cálculo lambda. Ha resultado tener muchas… …   Enciclopedia Universal

  • Lenguaje de programación Java — Saltar a navegación, búsqueda Java Paradigma: Orientado a objetos Apareció en: 1991 Diseñado por: Sun Microsystems Tipo de dato: Fuerte, Estático Implementacion …   Wikipedia Español

  • Java (lenguaje de programación) — Este artículo o sección se encuentra desactualizado. Es posible que la información suministrada aquí haya cambiado o sea insuficiente …   Wikipedia Español

  • Forth — Saltar a navegación, búsqueda Para otros usos de este término, véase Forth (desambiguación). Forth o FORTH es un lenguaje de programación para computadores y un ambiente de programación ideado por Charles H. Moore y Elisabeth Rather entre los… …   Wikipedia Español

  • Unlambda — es un lenguaje de programación inventado por David Madore. Este lenguaje es producto de la intersección entre dos lenguajes de programación marginales . Lenguajes de programación ofuscados o lenguaje de programación esotérico, de los cuales el… …   Wikipedia Español

  • Forth — es un lenguaje de programación interactivo atípico, inventado (aunque su autor y seguidores prefieren decir descubierto) por Charles H. Moore en los años 1960. Una de sus importantes características es la utilización de una pila de datos para… …   Enciclopedia Universal

  • C Shell — Lenguaje de programación, conocido también como csh y que fue desarrollado por Bill Joy en la Universidad de Berkeley, California. Se le considera más idóneo para programadores que Bourne Shell (bash), además de hacer reflejar que la informática… …   Enciclopedia Universal

  • Clojure — Desarrollador(es) http://clojure.org Información general …   Wikipedia Español

  • TeX — TeΧ Desarrollador Donald Knuth http://www.tug.org/ …   Wikipedia Español

  • Homoiconicidad — En programación informática, la homoiconicidad es una propiedad de algunos lenguajes de programación, en los cuáles la representación primaria de éstos es también una estructura de datos en un tipo primitivo del lenguaje. Contenido 1 Orígenes 2… …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”