Articulo de referencia

Lispkit Lisp

Lispkit Lisp es un subconjunto de Lisp ( Lisp puro ) puramente funcional y con ámbito léxico , desarrollado como banco de pruebas para conceptos de programación funcional . Se u...

Lispkit Lisp es un subconjunto de Lisp ( Lisp puro ) puramente funcional y con ámbito léxico , desarrollado como banco de pruebas para conceptos de programación funcional . Se utilizó por primera vez para la experimentación inicial con la evaluación perezosa . Una implementación basada en una máquina virtual de pila, entorno, control y volcado, y una máquina abstracta ( máquina SECD ) escrita en una variante de ALGOL fue publicada por el desarrollador Peter Henderson en 1980. [ 1 ] El compilador y la máquina virtual son altamente portátiles y, como resultado, se han implementado en muchas máquinas. [ 2 ] [ 3 ]

Lenguaje base

El lenguaje base proporciona únicamente las siguientes funciones, pero en el libro de Henderson [ 1 ] se analizan extensiones para el soporte explícito de la evaluación perezosa y la programación no determinista .

atom– dada una expresión, devuelve True si su valor es atómico; False si no lo es.
add– dadas dos expresiones, devuelve la suma de sus valores numéricos.
car– dada una expresión cuyo valor es un par, devuelve el primer valor del par.
cdr– dada una expresión cuyo valor es un par, devuelve el segundo valor del par.
cons– dadas dos expresiones, devuelve un par de valores que consta de sus valores.
div– dadas dos expresiones, devuelve el cociente de sus valores numéricos.
eq– dadas dos expresiones, devuelve Verdadero si sus valores son iguales; Falso si no lo son.
if– dadas tres expresiones, devuelve el valor de la segunda si el valor de la primera es verdadero; de lo contrario, devuelve el valor de la tercera.
lambda– dada una lista de argumentos y una expresión, los devuelve como una función.
let– dada una expresión con declaraciones (como expresiones con nombre visibles en la expresión) devuelve su valor.
letrec– como en Let, excepto que los nombres declarados también son visibles en las propias declaraciones.
leq– dadas dos expresiones, devuelve True si el valor de la primera es numéricamente menor o igual que el valor de la segunda; False en caso contrario.
mod(o rem) – dadas dos expresiones, devuelve el módulo (también conocido como resto) de sus valores numéricos.
mul– dadas dos expresiones, devuelve el producto de sus valores numéricos.
quote– dada una expresión, devuelve esa expresión como un valor.
sub– dadas dos expresiones, devuelve la diferencia de sus valores numéricos.

Las funciones , lambda, lety letrec, son similares pero tienen diferencias sutiles en la forma en que tratan las variables con nombre, lo que las hace útiles de diferentes maneras: lambdadefine y devuelve una función, letvincula expresiones a nombres de variables y letreces esencialmente similar a letexcepto que permite definir funciones y valores recursivos , por ejemplo, series infinitas .

Referencias

  1. 1 2 Henderson, Peter (1980). Programación funcional: aplicación e implementación . Prentice Hall. ISBN 0-13-331579-7.
  2. McJones, Paul (12 de mayo de 2014). "Original OUCL PRG LispKit" . Computer History Museum : Software Preservation Group . Mountain View, California: University of Oxford.
  3. McJones, Paul (12 de mayo de 2014). "La adaptación de LispKit a GNU Pascal por Aaron Gray" . Computer History Museum : Software Preservation Group . Mountain View, California: Cybercomms.org.

Lecturas adicionales

  • Henderson, Peter; Jones, Geraint A.; Jones, Simon B. (1 de diciembre de 1983). El manual de LispKit . Laboratorio de Informática de la Universidad de Oxford . ISBN 978-0902928183.
  • Henderson, Peter; Jones, Geraint A.; Jones, Simon B. (1 de diciembre de 1983). El manual de LispKit: Volumen 1 (PDF) . Oxford, Inglaterra: Universidad de Oxford : Laboratorio de Computación: Grupo de Investigación en Programación.
  • Henderson, Peter; Jones, Geraint A.; Jones, Simon B. (1 de diciembre de 1983). El manual de LispKit: Volumen 2 (PDF) . Oxford, Inglaterra: Universidad de Oxford : Laboratorio de Computación: Grupo de Investigación en Programación.
  • Archivo de código y archivos antiguos de LispKit Lisp, además de una implementación en C de la máquina SECD.
  • Artículo sobre una implementación de LispKit Lisp en Java y la implementación