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]
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.
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: