You are on page 1of 26

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

Lisp Tutorial
CS 157

Inteligencia Artificial 2012-I


Grupo 6 Integrantes: o Lzaro Lujerio, Jos Mximo o Kuoman Mamani, Katherine Beatriz 09200124 o Cornejo Bonifacio, Mark Saulo 09200093

09200079

Interprete
Si deseamos salir escribimos (exit) El interprete lee, evala lo que se ingresa por comando (notacin infija) para despus imprimir una respuesta. Un ejemplo seria:

Tipos de datos: tomos


Existen dos : Listas y tomos. Un tomo por ejemplo serian: Ana, 15, rojo, lechuga. En caso de los nmeros se evala a si mismos

Para asignar valor a un tomo x utilizamos setq o setf

Las maysculas y minsculas son indiferentes, es decir abc es igual que decir Abc o aBc, etc.

dNi se refiere al mismo tomo que dni

Se pueden dar valor nulo a un tomo

Tipos de datos: Listas

Una lista seria como ejemplo: (mesa), (15 2), (teclado monitor cpu), (rojo (azul amarillo) verde anaranjado), etc. Cuando se ingresa una lista en comando siempre hace que se invoque una funcin Cuando se reconoce la lista la analiza primero sus parametros y despus procede a realizarle las operaciones respectivas.

Funciones Primitivas
Lisp posee muchas funciones: +, -, *, /, sqrt, max, min, etc. Incluye tambien una operacin para listas:

cons Crea una lista de datos con una cola.

Recordar que la cola nil es nulo.

Funciones Primitivas: Listas de construccin

Para que el interprete no evalua el atomo lapiz ponemos usamos: Tambin se puede ingresar una lista completa Si deseamos elementos por separado usamos list Para concatenar listas usamos append

Backquote y comas

Citamos una lista con excepcion de uno de sus elementos Si no queremos utilizar tantas comillas usamos:
( edad 89 Rosa , (- dni 2))

La coma nos indica que el interprete deber evaluar la funcin despus de la misma.

Funciones primitivas: Lneas de acceso

Cuando creamos una lista podemos acceder a sus miembros a travs de:
Si queremos acceder al primer mienbro de la lista usamos:

Para ver todos los elementos de la lista menos el primero usamos cdr o rest

Podemos combinar las funciones utilizando caar (ver el primer elemento del primer elemento de la lista) y cdar (ver los elementos de la lista menos el primero del primer elemento de la lista)

Modificacin de los valores tomos

Ejemplo:

Usamos setf si el primer argumento es una funcin

Igualdad (Equals)

Existen dos tipos de respuestas de igualdad T (verdadero que los elementos son iguales) y cuando no son iguales (nil)

Sets

Para manejar las listas como conjuntos podemos usar union

Si los elementos en el conjunto son iguales o no usamos adjoin y setdifference

Mas funciones

Si queremos saber el tamao de la lista de elementos usamos length Para saber si es un solo atomo o no usamos atom

Para saber si ciertos elementos son una lista o no usamos listp

Representacin de sentencias KIF

Sentencias KIF
(<= r (and s p)) (not (not k)) (or a (not b) c)

Esto lo representamos en Lisp como:

Debemos recordar que los operadores =>, <=, <=>, or, and, not siempre van delante de la expresin

Definicin de funciones
(defun <nombre> <documentacin> (<argumentos>) <cuerpo>) (defun cuadrado calcular cuadrado (x) (* x x)) (defun ar (conclusion de las remisas) nil)

Recordemos que no tenemos que mencionar a ninguno de los argumentos del defun. Se realiza de forma automtica

Derivacin (Branching)
(if <expresion> <then-expresion> <sinoexpresion>) (if (> A B) (- A B) (- B A)) (cond ((Testa) (primera_forma) (segunda _forma)(N_forma)) ((Testb) (form1b)(formNb)) (t (form1k) (formNk)) (cond ((atom p) nil) ((listp p) (car p)) (t nil))

Aqu se realiza la condicion if hasta que esta siga siendo verdadera. La ultima funcin que se realiza es cond.

Funciones Lgicas y Nulo

(and <forma_1> <forma_2> <forma_n>)


Evalua hasta que form_1 sea nulo de lo contrario evalua el siguiente y asi sucesivamente.

(or <forma_1> <forma_2> <forma_n>)


Evalua el primer elemento no nulo, si en caso no existiese evalua a cero.

(not <forma_1>) y (null <forma_1>) son iguales solo que la ultima forma se suele utilizar cuando se trata de una lista.
Evaluar T si y solo si <forma_1> es nulo

Iteracin

(let ((<variable_1> <init_1>) (<variable_2> <init_2>) ) <cuerpo> )


Declaracin de variables (se recomienda declarar antes de usarlas)

(dotimes (<contador_1> <limite_1> <resultado_1>) <cuerpo>)

Iteracin 2
(dolist (<var> <initlist> resultado
<) <body>) (do((<var1> <init1> <increment1>) (<var2> <init2> <increment2>) ...) (<termination-test> <result>) <body>) - Combina y que dolist

Ejemplo

Recursividad

Mapcar
(mapcar <function-name> <list>) - Mapcar aplica la funcin a cada elemento delista y devuelve una lista de los resultados.

Las operaciones de la lista de Otros: remove-if,remove-if-not, some, every, search, subseq, length.

Strings
Una cadena en Lisp es tcnicamente decaracteres (al igual que C). una serie Usted tendr que utilizar operadores especiales para trabajar concadenas: concatenate, subseq, search. El cdigo de ejemplo incluye una funcionalidad suficiente paraque no tener que preocuparse sobre las cadenasadems de la salida de los resultados de su razonador. La nica cosa a tener en cuenta es cuando seincluye una cita en el html que enviar de vuelta al cliente.Slo asegrese de usar una \ para escapar de cualquiercita.Un ejemplo aparece en la funcinmyfrontpage.

Salida (Output)
(print <form>), ambos grabados en la evaluacin de <form> y devuelve la evaluacin de<form>. Es til para la depuracin princ, print1, imprimir todo el trabajo, bsicamente, dalo mismo pero con pequeas diferencias.

Formato de salida
(formato <destination> <controlstring> <optionalarguments>) - <destination>: T imprime en la lnea de comandos nula, pero no se imprime nada cadena devuelve otra se imprime en la <destination> corriente - <control-string>: Printf gusta mucho / sprintf en C. Incluye marcadores de posicin para los argumentos. - <optional-arguments>: Los argumentos que se llenan en la marcadores de posicinen el control de cadena

Formato de salida 2

~ A: Ascii - cualquier objeto Lisp ~ D: Decimal - nmeros ~%: Nueva lnea ~~: Tilde

Depuracin: trace

Depuracin: trace (trace <func-name1> <func-name2> ... <funcnamen>), por ejemplo(Trace Times2 positiva literales) - Cada vez que una de estas funciones se evala, Lispimprime el nombre de la funcin y los argumentos que sedado a la terminal. Llamadas de seguimiento varias veces se sumar a la lista defunciones. Para desactivar el seguimiento para una funcin foo y bar, uso(Barra de untrace foo) Para desactivar todas las de seguimiento, el uso(Untrace)

You might also like