Professional Documents
Culture Documents
Lisp Tutorial
CS 157
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:
Existen dos : Listas y tomos. Un tomo por ejemplo serian: Ana, 15, rojo, lechuga. En caso de los nmeros se evala a si mismos
Las maysculas y minsculas son indiferentes, es decir abc es igual que decir Abc o aBc, etc.
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:
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.
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)
Ejemplo:
Igualdad (Equals)
Existen dos tipos de respuestas de igualdad T (verdadero que los elementos son iguales) y cuando no son iguales (nil)
Sets
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
Sentencias KIF
(<= r (and s p)) (not (not k)) (or a (not b) c)
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.
(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
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)