T2 tutorial de lisp completo-grupo6
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

T2 tutorial de lisp completo-grupo6

on

  • 1,053 views

 

Statistics

Views

Total Views
1,053
Views on SlideShare
1,053
Embed Views
0

Actions

Likes
0
Downloads
44
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

T2 tutorial de lisp completo-grupo6 Presentation Transcript

  • 1. INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 2. • Para salir escriba (exit)• Pruebe un comando de ejemplo como la multiplicación : (* 5 6 20) => 600• La anterior instrucción hará una multiplicación de los tres números devolviendo 600 como resultado.• Tenemos 2 tipos de datos: Atómicos y Listas 2 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 3. b,4, color-casa ,etc.Al evaluar un tipo de dato atómico, nos devuelve el valor que se leha asignado. Los números son un caso especial, siempre devuelvenel mismo valor. 20 = > 20Si ponemos “edad-hermano” sin definirla con un valor, devuelve: edad-hermano => Error (variable not defined)Se asigna un valor con el comando: (setq edad-hermano 19)=> 19 edad-hermano => 19Existen palabras reservadas como nil , T, etc.No se distinguen mayúscula y minúsculas: las variables ola y Ola sonla misma. 3 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 4. (b), ( * 9 8) , (casa ( silla mesa e) j ), (), nil• nil es a la vez un valor atómico y una lista : ()• La evaluación de una lista siempre invoca una función. (nombre-de-la-función argumento1…argumento n) (* 50 10) => 5 (e 45,46,47) => Error (function not defined) (+ edad-hermano 8) => 27• Cuando evaluamos una lista, primero evaluamos los argumentos para después aplicar la función 4 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 5. • Lisp incluye operadores como +, - , * , /• Además, incluye varias operaciones importantes.  Cons construye una lista de datos con una cola. (cons 10 (cons 12 nil)) => (10 12)  Hay que tener en cuenta que el valor de la cola que significa nada es nulo.  Si probamos con átomos que no están reservados. (cons Jose nil) => Error: variable a is not defined. ¿Por qué sale ese error? 5 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 6. Tenemos que decirle al intérprete que no evalúe al átomo Jose. Para ello se pone adelante ‘ (cons ‘Jose nil) => (JOSE)De forma abreviada se puede aplicar a una lista completa : (cons ‘Jose ‘(Pepe Marta Carlos ))=> (JOSE PEPE MARTA CARLOS) Veremos diferencias entre list y append. (list ‘Jose ‘Marta ‘Carlos) => (JOSE MARTA CARLOS) (list ‘Jose ‘(Marta Carlos)) => (JOSE (MARTA CARLOS))(append ‘(Jose Marta) ‘(Carlos Carmen))=> (JOSE MARTA CARLOS CARMEN)La diferencia es que append, usa a listas como argumentos para formar otra lista. 6 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 7. Si queremos listar, pero uno de los elementos a listar es resultado de una operación, se pondrá entre paréntesis. Por ejemplo:(list ‘Jose ‘24 (* edad-hermano 3) ‘ Marta ‘24) => (JOSE 24 75 MARTA 24)Una coma dentro de un par de paréntesis antepuesto por una apóstrofe,le dice a Lisp que, tiene evaluar lo que le sigue a la coma. Por ejemplo: ‘(Jose 24 ,(* edad-hermano 3) Marta 24)=> (JOSE 24 75 MARIA 24) 7 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 8. Una vez que tenemos una lista construida, ¿Cómo accedemos a los miembros de la lista?• first : Primero de una lista. (first ‘(Jose Marta Carlos)) => JOSE (first ‘((Jose Marta Carlos) Carmen) )=> (JOSE MARTA CARLOS)• rest : Toda la lista menos el primer elemento (rest ‘(Jose Marta Carlos)) => (MARTA CARLOS) (rest ‘((Jose Marta Carlos) Carmen) )=> (CARMEN)• car y cdr se pueden combinar (caar ((Jose Marta ​) Carmen Miguel)) => JOSE (cdar ((Jose Marta ​) Carmen Miguel)) => (MARTA) Se tiene que trabajar desde la derecha hacia la izquierda. 8 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 9. • Por ejemplo, si escribimos: (setq listaPrueba ‘(Ana Carla Patricia)) => (ANA CARLA PATRICIA) (cons ‘Marcos listaPrueba) => (MARCOS ANA CARLA PATRICIA) listaPrueba => (ANA CARLA PATRICIA)• No tiene efectos secundarios, la lista no cambió. Necesitamos setq para cambiar el valor de un átomo.• setf es una versión de setq que tiene una función como primer argumento. (setf (cadr listaPrueba) ‘Antonio) => ANTONIO listaPrueba => (ANA ANTONIO PATRICIA) 9 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 10. • A continuación veremos 2 tipos de igualdad (eq ‘Marta ‘Carlos) => nil (eq ‘(jose) ‘(Jose)) => nil (eq ‘Jose ‘JoSe) => T (equal ‘Carlos ‘Carlos) => T (equal ‘(Marta) ‘(Marta)) => T (equal ‘(alumno profesor) ‘(alumno profesor)) => T• (equal x, y) es T cuando (eq x y) es verdadero y cuando las cosas se escriben iguales son verdaderas . 10 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 11. • ¿Se puede el tratar a una lista como un conjunto, es decir, sin preservar el orden? (union ‘(Marta Carla) ‘(Marta Luis Juan)) => (JUAN LUIS MARTA CARLA) (union ‘((Marta) (Carmen)) ‘((Marta))) => ((MARTA) (MARTA) (CARMEN)) (union ‘((Marta) (Carmen)) ‘((Marta)) :test ‘equal) => ((MARTA) (CARMEN))• La condición de prueba para determinar si los 2 elementos en el conjunto son los mismos es la función equal. (adjoin ‘Marta ‘(Marta Carla Juan)) => (MARTA CARLA JUAN) (set-difference ‘(Juan Marta Carla ) ‘(Marta Pedro Carla)) => (JUAN)• adjoin y set-difference también pueden usar :test ‘equal. Incluso puede proporcionar su propia función. 11 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 12. (length ‘(Richard Cecilia Alonso)) => 3 (atom ‘1) => T(atom ‘(Richard Cecilia Alonso)) => NIL (listp ‘inteligencia) => NIL (listp ‘(IA Modelos Redes)) => T 12 de 40INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 13. (<= Alonso (and Bruno Carmen)) (not (not Daniel)) (or Pablo (not Pedro) Marcos) (list ‘<= ‘Alonso (list ‘and ‘Bruno ‘Carmen)) => (<= ALONSO (AND BRUNO CARMEN)) (list ‘not (list ‘not ‘Daniel)) => (NOT (NOT DANIEL)) (list ‘or ‘Pablo (list ‘not ‘Pedro) ‘Marcos) => (OR PABLO (NOT PEDRO) MARCOS)Tener en cuenta que los operadores KIF =>, <=, <=>, and, or, not seránsiempre el primer elemento de la lista. 13 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 14. (defun <nombre> <documentación-de-cadena> (<argumentos>) <cuerpo>) (defun cubo (dato1) (* dato1 dato1 dato1)) cubo 6 => 216Tenga en cuenta que no tenemos que citar a ninguno de los argumentos dedefun. Se atiende de forma automática.La evaluación de una función para un conjunto de argumentos comoresultado en la última expresión valuada en el función de seguimiento. 14 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 15. (if <expresión> <entonces - expresión> <de lo contrario - expresión>)Por ejemplo: setq dat1 5 => 5 setq dat2 6 => 6 (if (> dat1 dat2) (- dat1 dat2) (* dat1 dat2)) => 30 (if (> 3 4) (+ 3 4) (- 3 4)) => -1 (if (eq 3 3) (+ 20 1) (/ 10 2)) => 21 15 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 16. La evaluación de cond evalúa las pruebas hasta que unade ellas se evalúe como verdadera. A continuación, se evalúa cada uno delas formas adecuadas; la última evaluación es el valor de toda la funcióncond.Por ejemplo: setq listaN ‘(25 12 100 20) => (25 12 100 20) listaN => (25 12 100 20) car listaN => 25 atom listaN => NIL listp listaN => T ( cond ( (atom listaN) NIL) ((listp listaN) (car listaN)) (T NIL) ) => 25 16 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 17. 17 de 40INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 18. 18 de 40INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 19. 19 de 40INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 20. 20 de 40INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 21. 21 de 40INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 22. 22 de 40INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 23. (and <form1> <form2>….<formn>)• Evalúa a nil tan pronto como uno de los <formi> sea nulo. De lo contrario se evalúa hasta <formn> (or <form1> <form2>….<formn>)• Evalúa al primer argumento no nulo. Si no hay ninguno evalúa a cero. (not <form>) y (null <form>) son idénticos.• Por lo general, utilizan este último cuando el resultado debería ser una lista. 23 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 24. 24 de 40INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 25. (let ((<var1> <init1>) (<var2> <init2>)…)<body> )• Declarar las variables locales. Lo mejor es declarar las variables antes de usarlas. (dotimes (<contador> <limite> <result>)<body>)(let ((sum 10))(dotimes (i 10 sum ) (setq sum (- sum 1))))(let ((sumatoria 0))(dotimes (i 20 sumatoria )(setq sumatoria (+ sumatoria i)))) 25 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 26. 26 de 40INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 27. (dolist (<var> <initlist> <result) <body>) (do ((<var1> <init1> <increment1>)(<var2> <init2> <increment2>) …)(<termination-test> <result>) <body>)• Combinaremos let and dolist (let ((acuSuma 0)) (dolist (indice ‘(1 2 3 4 5 6 7) acuSuma) (setq acuSuma (+ acuSuma indice)) ) ) 27 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 28. 28 de 40INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 29. • Nada nuevo en esta sección (defun factorial (numero)(if (eq numero 1) 1 (* numero (factorial (- numero 1))) )) (factorial 5) -> 120 29 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 30. 30 de 40INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 31. 31 de 40INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 32. • (mapcar <nombre-función><lista>) - Mapcar aplica la función a cada elemento de lista y devuelve una lista de los resultados. (mapcar ‘atom ‘(alumno profesor (a b) )) => (T T nil ) (defun factorial (numero)(if (eq numero 1) 1 (* numero (factorial (- numero 1))) )) (mapcar ‘factorial ‘(1 3 6)) => (1 6 720)• Otras Operaciones de listas: remove-if, remove-if-not, some, every, search, subseq, length 32 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 33. 33 de 40INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 34. 34 de 40INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 35. • Una cadena en Lisp es técnicamente una serie de caracteres.• Tendrá que utilizar operadores especiales para trabajar con cadenas: concatenar, subseq, de búsqueda.• El código de ejemplo incluye la funcionalidad suficiente para que no deberían tener que preocuparse sobre las cadenas Además de la salida de los resultados de su razonador.• La única cosa a tener en cuenta es cuando usted está incluir una cita en el html que enviar de vuelta al cliente. Sólo asegúrese de usar una para escapar de cualquier tales citas. Un ejemplo aparece en la función myfrontpage. 35 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 36. • (print <form>) imprime tanto la evaluación de <form> y vuelve a la evaluación de <form>.• Es útil para la depuración.• princ, print1, print todo trabajo es básicamente lo mismo pero con pequeñas diferencias. 36 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 37. (format <destination> <control-string> <optionalarguments>)<destination>: imprime en la línea de comandosNil No imprime nada pero retorna cadenas sino imprime en elflujo de <destination><control-string>: Al igual que printf/sprintf en C. Incluyemarcadores de posición para los argumentos 37 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 38. <optional-arguments>: Los argumentos que se llenan en losmarcadores de posición en el control de cadena.• ~A: Ascii—cualquier objeto Lisp• ~D: Numeros decimales• ~%: nueva linea• ~~: tilde 38 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 39. 39 de 40INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6
  • 40. (trace <func-name1> <func-name2> … <funcnamen>)• Cada vez que una de estas funciones se evalúa, Lisp imprime el nombre de la función y los argumentos dado en la terminal. Cada vez que una las funciones retornen salidas, Lisp imprime lo que su valor de retorno era. Llamar a remontar varias veces se sumará a la lista de funciones.• Para desactivar el seguimiento de una función foo y bar, use (untrace foo bar). Para desactivar todo el rastreo, use (untrace) 40 de 40 INTELIGENCIA ARTIFICIAL - CICLO 2012-I - GRUPO 6