Académique Documents
Professionnel Documents
Culture Documents
Ésta notación es bastante usada, como se ve el resultado del comando ingresado (+ 24 35 67) es 126.
TIPOS DE DATOS
o CL-USER 1 > 29
29
o CL-USER 2 > z
Para asignar valores a los atoms se utiliza los comandos setq o setf. En el siguiente ejemplo
asignaremos los números 17 y 19 a los atoms m y n respectivamente:
También podemos invocar una función evaluando una lista en donde uno de sus argumentos es un
Atom con un valor previamente asignado.
FUNCIONES PRIMITIVAS
Cons:
Construye una lista a partir de datos y una cola. Y el valor de la cola significa nada; es decir, NIL.
Al usar cons con un Atom que no es reservado producirá un error, para que no ocurra esto se tiene que
utilizar apóstrofes (`).
También puede ser aplicado a una lista completa; pero esto puede resultar complicado, para ello es
mejor usar un list o un append.
List y Append:
Son funciones que toman cualquier cantidad de argumentos. En Append es necesario que al declarar
los argumentos vayan entre paréntesis si son 2 o más argumentos, mientras que en el list solo es
necesario cuando algunos de sus argumentos tienen 2 o más elementos.
De manera reducida, usando el apóstrofe y la coma podemos evitar usar el list y el apóstrofe repetidas
veces:
Accesando a la lista:
First y car nos dan el primer elemento de la lista, si la lista no es NIL; caso contrario devolverá NIL.
Car y cdr pueden combinarse para obtener diferentes resultados, la manera de trabajar es de
derecha a izquierda.
Como se ve al utilizar setq el valor del Atom X no cambia. También se tiene setf que es un tipo de setq
que toma como primer argumento una función.
2. (equal x y) Compara 2 argumentos que pueden ser listas, dando como resultado T si es una
igualdad o NIL en caso contrario.
o CL-USER 20 : 2 > (equal '(m) '(m))
T
o CL-USER 21 : 2 > (equal 'm 'm)
T
o CL-USER 22 : 2 > (equal '(m n p q r) '(m n p q r))
T
Sets:
Se puede manejar las listas como conjuntos.
o CL-USER 25 : 2 > (union '(m n p q r) '(p q r s t))
(T S M N P Q R)
o CL-USER 26 : 2 > (union '((a (b c))) '((d (b c))))
((D (B C)) (A (B C)))
o CL-USER 30 : 2 > (union '((a) (b) (c) (d)) '((d)) :test #' equal)
((A) (B) (C) (D))
Se coloca la siguiente sentencia: test #' equal para evaluar las listas de los argumentos y suprimir las
listas repetidas.
Adjoin y set-difference son usados para añadir un elemento o una lista a otra lista y para separar los
elementos que diferencia a un argumento del otro, respectivamente. En caso de este último es similar
a la propiedad de diferencia estudiada en conjuntos.
o CL-USER 35 : 6 > (adjoin '(a b) '(c d e))
((A B) C D E)
o CL-USER 36 : 6 > (set-difference '((a b) c) '(c))
((A B))
Más funciones:
length Devuelve el número de elementos de la lista
DEFINIENDO FUNCIONES
Al igual que otros lenguajes de programación, en Lisp podemos declarar funciones para modularizar los
programas y hacerlos más legibles en la medida de lo posible, reutilizando así código escrito y separando
distintas partes del problema a representar en módulos.
RAMIFICACIÓN
ITERACIÓN
DO es el iterativo más poderoso de LISP. Permite asignar varias variables (como LET), hacer pasos de
iteración como uno quiera y especificar la condición de terminación.
o CL-USER 13 : 3 > (do ((n 1 (+ n 1))) ((> n 10) 'hecho) (print n))
10
HECHO
RECURSIÓN
Por ejemplo:
LAMBDA
En este caso var1 var2… varN son las variables a las cuales se les asigna un valor respectivo que vienen a ser
val1 val2… valN las cuales evalúan las expresiones presentes en s1 s2… sN para generar un resultado.
MAPCAR
Mapcar aplica la función a cada elemento de la lista y devuelve una lista de resultados.
MEMBER
Comprueba si un elemento pertenece a una lista y devuelve una lista con los elementos que hay desde el
elemento coincidente.
OUTPUT
(print <form>)
Evalúa <form> y devuelve el elemento evaluado por pantalla.
o CL-USER 2 > (print (/ 258 4))
129/2
129/2
Princ, print1, print, todos estos trabajan básicamente de la misma forma, salvo pequeñas diferencias.
FORMATTED OUTPUT (Salida con formato)
(format <destination> <control-string> <optionalarguments>)
EJEMPLO:
DEBUGGING: TRACE
Cada vez que una de estas funciones es evaluada, Lisp imprime el nombre de la función y los argumentos
que da el terminal, cada vez que una de estas funciones existe, Lisp imprime el valor que regresa.
Haciendo una traza (trace) podemos ver que ocurre hasta que salga el resultado. Por ejemplo:
o CL-USER 3 : 1 > (defun factorial (n)
(if (eq n 0)
(* n (factorial (- n 1)))))
FACTORIAL
(FACTORIAL)
EJEMPLOS APLICATIVOS
EJEMPLO1: