Articulo de referencia

Sin lambda

Unlambda es un lenguaje de programación funcional mínimo, "casi puro " [1], inventado por David Madore. Se basa en la lógica combinatoria , un sistema de expresión sin el operad...

Unlambda es un lenguaje de programación funcional mínimo, "casi puro " [1], inventado por David Madore. Se basa en la lógica combinatoria , un sistema de expresión sin el operador lambda ni variables libres. Se basa principalmente en dos funciones integradas ( y ) y un operador de aplicación (escrito , el carácter de comilla invertida ). Estas funciones por sí solas lo convierten en Turing-completo , pero también hay algunas funciones de entrada/salida (E/S) para permitir la interacción con el usuario, algunas funciones de acceso directo y una función de evaluación diferida . No se admiten variables. sk`

Unlambda es un software libre y de código abierto distribuido bajo una Licencia Pública General GNU (GPL) 2.0 o posterior. [ aclaración necesaria ]

Principios básicos

Como lenguaje de programación esotérico , Unlambda está pensado como una demostración de programación funcional muy pura, más que para un uso práctico. Su característica principal es la falta de operadores y tipos de datos convencionales: el único tipo de datos en el programa son funciones de un parámetro. No obstante, los datos se pueden simular con funciones apropiadas, como en el cálculo lambda . Las funciones multiparamétricas se pueden representar mediante el método de currificación .

Unlambda se basa en el principio de eliminación de abstracción , o la eliminación de todas las variables guardadas, incluidas las funciones. Como lenguaje puramente funcional, las funciones de Unlambda son objetos de primera clase y son los únicos objetos de este tipo.

A continuación se muestra una implementación de un programa de hola mundo en Unlambda: [1]

`r```````````.Hola .mundoi

Funciones incorporadas originales

La notación denota una función que toma un argumento y lo devuelve sin cambios, imprimiendo el carácter único x como efecto secundario cuando se la invoca. representa la versión de la función de identidad que no tiene dicho efecto secundario; se utiliza aquí como un argumento ficticio. El programa aplica la función -printing a un argumento ficticio de , devolviendo e imprimiendo la letra como efecto secundario. De manera similar, primero se aplica a , imprimiendo la letra y devolviendo ; este resultado de se aplica luego a como en el ejemplo anterior. La función es azúcar sintáctica para la función que imprime un carácter de nueva línea. .xi`.didiid``.l.di.l.dl.d.dir

Otras características importantes que ofrece Unlambda incluyen las funciones ky s. kCrea funciones constantes: el resultado de es una función que, cuando se invoca, devuelve x . Por lo tanto, el valor de es x para cualquier x e y . `kx``kxy

ses un operador de evaluación generalizado. evalúa como para cualquier x , y y z . Es un hecho notable que y son suficientes para realizar cualquier cálculo, como se describe en el cálculo del combinador SKI . Como un breve ejemplo, la función identidad se puede implementar como , ya que produce x para todo x . ```sxyz``xz`yzski``skk```skkx

La única construcción de control de flujo de Unlambda es la llamada con la continuación actual , denotada como . Cuando se evalúa cuna expresión de la forma , se construye un objeto de continuación especial , que representa el estado del intérprete en ese momento. Luego se evalúa x y, a continuación, se le da al resultado el objeto de continuación como argumento. Si la continuación nunca se aplica a un argumento, el valor de la expresión es el mismo que el valor de x . Pero si el objeto de continuación se aplica a un valor y , la ejecución de x se cancela inmediatamente y el valor de toda la expresión es y . `cx`cx`cx

La semántica de ejecución de unlambda es normalmente evaluación ansiosa , pero existe una opción de evaluación perezosa , indicada por el uso del doperador. Por lo general, para evaluar una expresión de la forma , unlambda primero evalúa x , luego y , y luego aplica x a y . Sin embargo, si x evalúa al valor especial , entonces y no se evalúa; en cambio, el valor de la expresión es un objeto especial de "computación retrasada", que, cuando se aplica a un argumento z , evalúa y , y luego aplica su valor a z . En ausencia de efectos secundarios, esto es exactamente lo mismo que . La diferencia es que ejecuta cualquier efecto secundario en y inmediatamente, mientras que difiere los efectos secundarios hasta que el resultado se aplica a otro argumento. `xyd`dy`iy`iy`dy

El siguiente operador incorporado de Unlambda es v, que ignora su argumento y devuelve v. Esta característica no es estrictamente necesaria, ya que vpodría implementarse como ``s`k``s``s`kskk`k``s``s`kskk, pero se proporciona por conveniencia. (Esta expresión anterior es simplemente `Yk, donde Ydenota un combinador de punto fijo ).

Funciones integradas de la versión 2

En la versión 2 de Unlambda se introdujeron más funciones integradas . La entrada se facilita mediante los operadores @y . Cuando se aplica a una función x , se lee un carácter de la entrada y se almacena como el "carácter actual"; luego, se aplica x a . Sin embargo, si no había más caracteres disponibles en la entrada, el carácter actual se deja sin definir y, en su lugar, se aplica x a . Cuando se aplica una función a una función x , el resultado es la evaluación de si el carácter actual es u , en caso contrario se evalúa . ?u@iv?u`xi`xv

También existe un operador de "reimpresión" |. Cuando se evalúa , se aplica la función x a si u es el carácter actual, o a si no hay ningún carácter actual. `|x.uv

Por último, existe un operador de salida e. Cuando ese aplica a x , se termina la ejecución del programa y x se toma como resultado del programa (la mayoría de los intérpretes existentes actualmente ignoran el resultado de todos modos).

Véase también

Referencias

  1. ^ ab Chu-Carroll, Mark C. (11 de agosto de 2006). "Programación patológica del viernes: Unlambda o programación sin variables". Buenas matemáticas, malas matemáticas (blog) . ScienceBlogs.
  • Felix-Hernandez Campos (1 de abril de 2002), Conferencia 28: Más sobre programación funcional , Universidad de Carolina del Norte COMP144
  • 原 悠 (Yutaka Hara) (2008). Ruby で 作 る 奇 妙 な プ ロ グ ラ ミ ン グ 言語 (en japonés). Tokio: Mainichikomyunikēshonzu. págs. 205-214. ISBN 978-4-8399-2784-4.
  • Sitio web oficial
Retrieved from "https://en.wikipedia.org/w/index.php?title=Unlambda&oldid=1239721564"