Lisp
Keywords: Lisp, ACL2, CLiki, Editor de texto, Emacs, Fortran, Función de Ackermann, John McCarthy
Después de Fortran es el segundo lenguaje de programación de alto nivel. Lisp fue creado por John McCarthy y sus colaboradores en el MIT.
| Tabla de contenidos |
Listas
El elemento fundamental en Lisp es la lista, en el sentido más amplio del término, pues tanto los datos como los programas son listas. De ahí viene su nombre, pues Lisp es un acrónimo de "LIStProcessing".
Los lenguajes de este tipo se llaman "aplicativos" o "funcionales", porque se basan en la aplicación de funciones a sus datos.
En Lisp se distinguen dos tipos fundamentales de elementos:
- Átomos: son datos elementales y pueden pertenecer a varios tipos: números, caracteres, cadenas de caracteres y símbolos.
- Listas: son secuencias de átomos o de listas encerradas entre paréntesis. Además, existe una lista especial, "nil", que es la lista nula, que no tiene ningún elemento.
En Lisp, una función se expresa como una lista.
Algunas de las funciones predefinidas de Lisp tienen símbolos familiares (+ para la suma, * para el producto), pero otras son más exóticas, especialmente dos que sirven precisamente para manipular listas, descomponiéndolas en sus componentes. Sus nombres ("car" y "cdr") son un poco extraños(1), reliquias de tiempos pasados y de la estructura de los ordenadores de segunda generación, "car" devuelve la cabeza de una lista y "cdr" su cola o resto.
Lisp sigue una filosofía de tratamiento no-destructivo de los parámetros, de modo que la mayoría de las funciones devuelven un lista resultado de efectuar alguna transformación sobre la que recibieron, pero sin alterar esta última.
Uno de los motivos por los que Lisp es especialmente adecuado para la IA es el hecho de que el código y los datos tengan el mismo tratamiento (como listas); esto hace especialmente sencillo escribir programas capaces de escribir otros programas según las circunstancias.
Lisp fue uno de los primeros lenguajes de programación a incluir manejo de excepciones con las primitivas catch y throw.
Derivado del Lisp es el lenguaje de programación Logo. Sin entrar en detalles, podría decirse que Logo es Lisp sin paréntesis y con operadores aritméticos infijos.
(1)De ahí que hoy tengan alias más significativos como "first"(car) y "rest"(cdr).
Ejemplos
(defun fact (n)
(if (<= n 1) 1 (* n (fact (- n 1)))))
(defun fibo (n)
(if (<= n 2) 1 (+ (fibo (- n 1)) (fibo (- n 2)))))
Grandes valores de la Función de Ackermann
;Propuesta por Robert Kosara
(defun ackermann (m n) "The Ackermann Function"
(cond ((= m 0) (+ n 1))
((= m 1) (+ n 2))
((= m 2) (+ 3 (* n 2)))
((= m 3) (+ 5 (* 8 (- (expt 2 n) 1))))
(t (cond ((= n 0) (ackermann (- m 1) 1))
(t (ackermann (- m 1) (ackermann m (- n 1))))
))
))
(ackermann 4 2)
Enlaces externos
- www.cliki.net CLiki, el wiki de common lisp
- La expansión decimal de A(4,2)
Aplicaciones en Lisp
Entre las más exitosas aplicaciones escritas en Lisp se pueden mencionar:
- Emacs, el editor de texto http://www.gnu.org/software/emacs/emacs.html
- ACL2, el demostrador de teoremas http://www.cs.utexas.edu/users/moore/acl2/
- Maxima, el sistema de álgebra computacional http://maxima.sourceforge.net/
Compiladores de Lisp
- GNU Common Lisp, software libre
- Allegro Common Lisp, software propietario
- CMU Common Lisp, software libre
- CLisp, a Common Lisp implementation, software libre
- OpenMCL Common lisp para Macintosh, software libre
- Steel Bank Common Lisp, creado a partir de CMU Common Lisp, es un software libre con énfasis en proveer facilidades para su mantenimiento.
Lisp
- REDIRECT Plantilla:Lenguajes de programación
