You are on page 1of 4

GONZLEZ ANGULO ARIADNA ITZEL

Lenguaje de Programacin LISP


Historia.
Lisp fue inventado por John McCarthy en 1958 mientras l estaba en el MIT. McCarthy
public su diseo en un artculo de Comunicaciones del ACM en 1960, titulado Recursive
Functions of Symbolic Expressions and Their Computation by Machine, Part I (Funciones
Recursivas de Expresiones Simblicas y su Computacin por Mquinas, Parte I).
Curiosamente la segunda parte nunca fue publicada. l mostraba que con unos pocos
simples operadores y una notacin para funciones, se puede construir un lenguaje de
programacin completo.
La notacin original usada por McCartyhy estaba basada en M-expressions. Esta fue
rpidamente abandonada en favor de las S-expressions que l originalmente propuso como
una representacin interna. Por ejemplo, la M-expresssion car[cons[A,B]] es equivalente a la
S-expression (car (cons A B)).
Lisp fue originalmente implementado por Steve Russell en un ordenador IBM 704 y los
dos lenguajes de macros para esta mquina llegaron a ser las operaciones primitivas para
descomposicin de listas: car (Contents of Address Register) y cdr (Contents of Decrement
Register). Los dialectos Lisp todava usan car y cdr para las operaciones que devuelven el
primer tem de una lista y el resto de la misma respectivamente.
El primer compilador de Lisp completo y escrito en Lisp fue implementado en 1962 por
Tim
Hart
y
Mike
Levin.
(AI
Memo
39,
767
kB
PDF
(ftp://publications.ai.mit.edu/aipublications/pdf/AIM-039.pdf)). Este compilador ya introduca
el modelo Lisp de compilacin incremental, en el que las funciones compiladas e
interpretadas pueden mezclarse libremente.
Desde su concepcin, Lisp estaba estrechamente conectado con la comunidad
investigadora en inteligencia artificial. En los aos 70, se empieza a comercializar la IA y el
rendimiento de los sistemas Lisp existentes llega a cuestionarse seriamente, en parte
debido a utilizar un recolector de basura y en parte porque, en su representacin de
estructuras internas, Lisp llega ser difcil de arrancar en el limitado hardware de
almacenamiento de memoria de aquellos tiempos. Esto motiva la creacin de mquinas
LISP: hardware de propsito especfico para arrancar entornos Lisp y programas. Las
tcnicas de construccin de compiladores modernos y las gigantescas capacidades de los
computadores de hoy en da han hecho esta especializacin hardware innecesaria y hoy
disfrutamos de entornos Lisp mucho ms eficientes que otros lenguajes ms populares.

Caractersticas.
Lenguaje Interpretado
Tambin posible compilado
Todas las variables son punteros
Liberacin automtica de memoria (automatic garbage collection)
Eficiencia menor que otros lenguajes (causas: es interpretado, liberacin automtica
de memoria).
Adecuado para prototipados y clculo simblico.

Ventajas.
Recoleccin de basura, recoleccin automtica de memoria no utilizada.
Computacin con expresiones simblicas, ms que con nmeros; es decir, los
patrones de bits en una memoria de ordenador y en los registros pueden representar
smbolos cualesquiera, y no solamente nmeros.
Procesamiento de listas, es decir, representacin de los datos como estructuras de
listas encadenadas en la mquina y como listas multinivel sobre el papel.

Desventajas.
En LISP la recursin se emplea a menudo como estructura de control, lo que resta
eficiencia alas ejecuciones.
Se basa en un principio de computacin que es muy diferente de la arquitectura Von
Newmann y no podra ejecutarse eficientemente en las mquinas existentes.

Aplicaciones.
LISP fue creado originalmente como una notacin matemtica prctica para los
programas de computadora, basada en el clculo lambda de Alonzo Church. Se convirti
rpidamente en el lenguaje de programacin favorito en la investigacin de la inteligencia
artificial (AI). Cuando se quiere implementar un problema en LISP, ste se realiza
escribiendo lo que se quiere conseguir y como, pero sin indicar paso a paso la secuencia de
acciones que la computadora debe de realizar.
LISP fue pionero en muchas ideas de la ciencias de la computacin usadas hoy en
da, incluyendo las estructuras de datos de rbol, el manejo de almacenamiento automtico,
tipos dinmicos, y el compilador auto contenido.
LISP ha cambiado mucho desde sus comienzos, y han existido un nmero de dialectos
en su historia, siendo los dos que imperan hoy en da el Common Lisp y el Scheme.
LISP adems, ha influenciado a muchos lenguajes de programacin, de los que
podemos destacar los cuatro ms conocidos, como son Smalltalk, CLOS, Dylan y Perl.

Ejemplos.
Escribir la funcin que divida una lista en 2 partes iguales y retorne una lista con las 2
nuevas sublistas (Si la cantidad de elementos es impar la primera sublista deber tener un
elemento ms).
(defun dividir-lista(list)
(let ((aux1 nil)
(aux2 nil))
(dotimes (i (length list))
(when (<= (+ i 1) (/ (length list) 2))
(push (nth i list) aux1))
(when (> (+ i 1) (/ (length list) 2))
(push (nth i list) aux2)))
(list (reverse aux1) (reverse aux2))))
Escribir la funcion rotar que rota los elementos de una lista hacia la derecha o hacia la
izquierda.
(defun rotar-derecha (lista)
(append (last lista) (reverse (rest (reverse lista)))))
(defun rotar-izquierda (lista)
(append (rest lista) (list (car lista))))
Escribir la funcin calcula-cuadrados que recibe una lista de numeros y devuelve otra lista
con el cuadrado de cada elemento.
(defun calcula-cuadrados (lista)
(mapcar #(lambda(x) (* x x)) lista)

REFERENCIAS
http://www.davidam.com/docu/lisp/lisp1.pdf
http://www.scribd.com/doc/53712048/Lisp
http://arantxa.ii.uam.es/~fdiez/docencia/material/lisp0.pdf
http://www.eui.upm.es/museo_virtual/3g/lisp
http://scalab.uc3m.es/~sjimenez/cursos/ejerciciosLisp.pdf

You might also like