stringtranslate.com

unlambda

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 comillas invertidas ). Esto por sí solo lo hace 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 . Las variables no son compatibles.sk`

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

Principios básicos

Como lenguaje de programación esotérico , Unlambda pretende ser una demostración de programación funcional muy pura más que 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 adecuadas como en el cálculo lambda . Las funciones multiparamétricas se pueden representar mediante el método de curry .

Unlambda se basa en el principio de eliminación de abstracciones , 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.

Aquí hay una implementación de un programa hola mundo en Unlambda: [1]

`r```````````.Hola .worldi

Funciones integradas 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 invoca. representa la versión de la función de identidad que no tiene tal 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 carta como efecto secundario. De manera similar, primero se aplica a imprimir la carta y devolverla ; este resultado de luego se aplica 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 proporcionadas por Unlambda incluyen las funciones ky s. kfabrica funciones constantes: el resultado de es una función que, cuando se invoca, devuelve x . Por tanto, el valor de es x para cualquier x e y .`kx``kxy

ses un operador de evaluación generalizado. se evalúa para cualquier x , y y z . Es un hecho notable que y son suficientes para realizar cualquier cálculo, como se describe en Cálculo combinador SKI . Como breve ejemplo, la función de 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 llamada con continuación actual , denotada c. Cuando se evalúa una expresión del formulario , se construye un objeto de continuación especial , que representa el estado del intérprete en ese momento. Luego se evalúa x y luego al resultado se le da 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 normalmente es una evaluación entusiasta , pero existe una opción de evaluación diferida , 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 se evalúa como el valor especial , entonces y no se evalúa; en cambio, el valor de la expresión es un objeto especial de "cálculo retrasado" 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 integrado 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 para su comodidad. (Esta expresión anterior es simplemente `Yk, donde Ydenota un combinador de punto fijo ).

Funciones integradas de la versión 2

Se introdujeron más funciones integradas en la versión 2 de Unlambda. La entrada la facilitan 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"; entonces x se aplica a . Sin embargo, si no había más caracteres disponibles en la entrada, el carácter actual queda sin definir y en su lugar se aplica x . 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, la función x se aplica si u es el carácter actual, o si no hay ningún carácter actual.`|x.uv

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

Ver 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) . Blogs de ciencia.

enlaces externos