Alegría (lenguaje de programación)

Alegría
clase de idioma multi- paradigma : funcional , concatenativo , pila
Apareció en 2001
Autor Manfred von Thun
Desarrollador Manfred von Thun, John Cowan
sistema de tipos fuerte , dinámico
Implementaciones principales Joy0, Joy1, "Alegría actual", "Alegría de John Cowan", "JoyJ (Alegría en jvmm)"
sido influenciado Esquema , C
influenciado Factor , Gato , V , Trith

El lenguaje de programación Joy  es un lenguaje puramente funcional desarrollado por Manfred von Thun en la Universidad La Trobe en Melbourne , Australia . Joy se basa en la composición de funciones, no en el cálculo lambda . Es un lenguaje relacionado con Forth , aunque no su sucesor directo. Joy se considera actualmente el ejemplo canónico de un lenguaje de programación concatenativo . [una]

¿Cómo funciona?

Joy se diferencia de otros lenguajes de programación (a excepción de los lenguajes de programación combinatorios y algunos lenguajes esotéricos como unlambda ) por la ausencia de un operador lambda , y por tanto la ausencia de parámetros formales . Para ilustrar esto, aquí hay un ejemplo de cómo se puede definir la función de elevar al cuadrado en el lenguaje de programación imperativo ( C ):

int cuadrado ( int x ) { devuelve x * x ; }

La variable x es un parámetro formal que se reemplaza por el valor real que se eleva al cuadrado cuando se llama a la función. En un lenguaje funcional ( Scheme ), la misma función se define de la siguiente manera:

( definir cuadrado ( lambda ( x ) ( * x x )))

Hay muchas diferencias entre estos dos ejemplos, pero usan parámetros formales de manera similar. En Joy, la función de elevar al cuadrado se define como:

DEFINIR cuadrado == dup * .

Todo en Joy es una función que toma una pila como argumento y devuelve una pila como resultado. Por ejemplo, el número "5" no es una constante entera, sino un programa corto que empuja el número 5 a la pila.

  • La instrucción dup simplemente duplica el elemento superior de la pila y coloca una copia allí.
  • El operador * toma los dos elementos superiores de la pila y empuja su producto allí.

Entonces, la función de elevar al cuadrado simplemente duplica el elemento superior y luego lo multiplica por sí mismo, no se necesitan parámetros formales. Esto hace que Joy sea conciso, como lo demuestra la siguiente definición de clasificación rápida :

DEFINIR qsort == [pequeña] [] [uncons[>]dividir] [[intercambiar] dip contras concat] binrec.

"binrec" es uno de los muchos combinadores recursivos en Joy que implementa la recursividad binaria. Espera cuatro literales de programa en la pila, que son:

  • condición de terminación (si la lista es "pequeña" (1 o 0 elementos) ya está ordenada),
  • qué hacer si se cumple la condición de terminación (nada en este caso),
  • qué hacer por defecto (dividir la lista en dos mitades comparando cada elemento con un punto de anclaje), y finalmente
  • qué hacer al final (insertar punto de anclaje entre dos mitades ordenadas).

Pureza matemática

Notas

  1. Dra. Dobbs

Literatura

Enlaces