48
I NTELIGENCIA A RTIFICIAL C URSO 2005-06 Tema 1: Introducción a L ISP Carmen Graciani Díaz José Luis Ruiz Reina Dpto. Ciencias de la Computación e Inteligencia Artificial U NIVERSIDAD DE S EVILLA IA 2005-06 Introducción a L ISP 1. 1

Tema 1: Introducción a L - Dpto. Ciencias de la

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tema 1: Introducción a L - Dpto. Ciencias de la

INTELIGENCIA ARTIFICIAL CURSO 2005-06

Tema 1:Introducción a LISP

Carmen Graciani Díaz

José Luis Ruiz Reina

Dpto. Ciencias de la Computación e Inteligencia Artificial

UNIVERSIDAD DE SEVILLA

IA 2005-06

��� ��� Introducción a LISP 1. 1

Page 2: Tema 1: Introducción a L - Dpto. Ciencias de la

Introducción a Lisp

r John McCarthy, 1958

r List Processing

r Procesamiento simbólico

r Lenguaje para la Inteligencia Artificial

• Solucionadores expertos de problemas: diagnosis de infecciones,simulación de circuitos eléctricos, . . .

• Razonamiento: representación del conocimiento, . . .

• Aprendizaje

• Lenguaje Natural

• . . .

IA 2005-06

��� ��� Introducción a LISP 1. 2

Page 3: Tema 1: Introducción a L - Dpto. Ciencias de la

Una sesión con LISP

r Arrancar un intérprete: clisp

r Interactuar con él:

• El usuario escribe una expresión en el intérprete.

• El intérprete de LISP reconoce la expresión como larepresentación escrita de un objeto LISP.

• El objeto es evaluado. Su valor es un objeto LISP.

• El intérprete elige una representación escrita del valor obtenido.

• El intérprete escribe dicha representación.

r Cerrar el intérprete: (exit)

IA 2005-06

��� ��� Introducción a LISP 1. 3

Page 4: Tema 1: Introducción a L - Dpto. Ciencias de la

Depurando errores en CLISP

r Ante un error el intérprete abre un depurador de errores.

r Se habilitan distintos comandos para obtener información acerca delerror cometido.• :h: lista de comandos disponibles

• :a: cerrar el depurador

r Si se comete un nuevo error antes de cerrar el depurador de erroresse abre uno nuevo.

IA 2005-06

��� ��� Introducción a LISP 1. 4

Page 5: Tema 1: Introducción a L - Dpto. Ciencias de la

Procesamiento simbólico

r Elementos fundamentales: átomos (atoms).

r Grupos de átomos conforman listas (lists) que a su vez se puedenagrupar formando listas de listas, . . .

r Átomos y listas, conjuntamente, son denominados expresiones sim-bólicas (symbolic expressions) o simplemente expresiones.

IA 2005-06

��� ��� Introducción a LISP 1. 5

Page 6: Tema 1: Introducción a L - Dpto. Ciencias de la

Tipos de datos básicos

r Átomos:

• números: 27,3.14, . . .

• símbolos: foo, FIRST, +, . . .

• No hay distinción entre mayúsculas y minúsculas.

• caracteres: #\A, #\Space

• cadenas: "Buenos días", "Ho\"l\"a"

• array: #(a b 0 "nil" NIL), #3A(((0 0) (1 1) (2 2))

((0 1) (1 2) (2 3)))

• estructuras: #S(PERSONA :NOMBRE (ana maria) :ESTADO

casado :CALLE (reina mercedes) :CIUDAD sevilla)

r Listas: Paréntesis izquierdo, cero o más expresiones, paréntesisderecho

IA 2005-06

��� ��� Introducción a LISP 1. 6

Page 7: Tema 1: Introducción a L - Dpto. Ciencias de la

Números

r Existen distintos tipos de números:

• Enteros: 14, 0, -7

• Racionales: 4/5, -2/1

• Coma flotante: 4.634, -.543

• Complejos: #C(3 46), #C(3.2, -5)

> (/ 22 7)22/7> (round (/ 22 7))3 ;1/7> (float (/ 22 7))3.142857> #c(2 0)2

IA 2005-06

��� ��� Introducción a LISP 1. 7

Page 8: Tema 1: Introducción a L - Dpto. Ciencias de la

Listas

r La lista ((a a p) ()) contiene dos elementos:

• la lista (a a p) y

• la lista ().

r La lista (a a p) contiene tres elementos:

• los símbolos a, a y p.

r La lista () está vacía.

IA 2005-06

��� ��� Introducción a LISP 1. 8

Page 9: Tema 1: Introducción a L - Dpto. Ciencias de la

Lenguaje interpretado

r Símbolos como variables: símbolos a los que se puede asociar unvalor.

r Símbolos como constantes: T, NIL, pi, . . . o símbolos declaradoscomo tales utilizando defconst. Tienen asociado un determinadoelemento.

r Constantes: números, caracteres o cadenas. Su valor es el propioelemento.

IA 2005-06

��� ��� Introducción a LISP 1. 9

Page 10: Tema 1: Introducción a L - Dpto. Ciencias de la

Lenguaje interpretado

r Llamadas a funciones: listas no vacías

• Primer elemento: función

• Restantes elementos: expresiones cuyo valor se utilizarán comoargumentos de la función.

• Los elementos se evalúan de izquierda a derecha.

Su valor es el resultado de la aplicación de la función.

IA 2005-06

��� ��� Introducción a LISP 1. 10

Page 11: Tema 1: Introducción a L - Dpto. Ciencias de la

Lenguaje interpretado

r LISP evalúa expresiones.

r Ciclo: Lee, evalúa, escribe.> 2.72.7> (+ 3 5)8> (+ (* 2 2) (/ 2 2))5

r En algunas expresiones la evaluación puede tener efectos colatera-les.> (format t "Escribe:")Escribe:NIL

• Valor de la expresión: NIL

• Efecto colateral: Escritura por pantalla de la cadena "Escribe:"

IA 2005-06

��� ��� Introducción a LISP 1. 11

Page 12: Tema 1: Introducción a L - Dpto. Ciencias de la

Notación LISP

r De la notación tradicional a la notación LISP.8 · f(x, a + 3) =⇒ (* 8 (f (+ a 3)))

• Notación prefija,

• paréntesis delante del símbolo de función,

• eliminación de comas.

IA 2005-06

��� ��� Introducción a LISP 1. 12

Page 13: Tema 1: Introducción a L - Dpto. Ciencias de la

La función quote

r (QUOTE <expresión>) =⇒ <expresión>

> (quote (+ 2 3))(+ 2 3)

r ’<expresión> ≡ (QUOTE <expresión>)

> ’(+ 2 3)(+ 2 3)

IA 2005-06

��� ��� Introducción a LISP 1. 13

Page 14: Tema 1: Introducción a L - Dpto. Ciencias de la

Lenguaje interpretado

r Una función especifica cómo hacer algo.

r LISP proporciona algunas funciones (primitivas): +, FIRST, AREF, . . .

r El usuario puede definir sus propias funciones a partir de los anteri-ores.

IA 2005-06

��� ��� Introducción a LISP 1. 14

Page 15: Tema 1: Introducción a L - Dpto. Ciencias de la

Definiendo funciones

r La forma especial DEFUN

(DEFUN <nombre>(<parámetros>)<documentación><cuerpo>)

r <nombre>: símbolo al que se asocia la función.

r <parámetros>: sucesión de símbolos a los que se asignará, tempo-ralmente, el valor de los argumentos con los que se utilice la función.

r <documentación>: cadena en la que se describe la función. Esopcional.

r <cuerpo>: sucesión de expresiones que se evalúan cuando se uti-liza la función.

IA 2005-06

��� ��� Introducción a LISP 1. 15

Page 16: Tema 1: Introducción a L - Dpto. Ciencias de la

Definiendo funciones

> (defun cuadrado (x) "Cuadrado de un numero" (* x x))CUADRADO

r (cuadrado 4) =⇒ 16:

• Se evalúa cuadrado: función definida por el usuario.

• Se evalúa 4: 4

• Se asocia al parámetro de cuadrado, x, el valor 4.

• Se evalúa la expresión que compone el cuerpo de cuadrado:

• Se evalúa *: función primitiva de LISP para calcular elproducto.

• Se evalúa x: 4

• Se evalúa x: 4

• Se calcula el producto con argumentos 4 y 4: 16

• Se elimina la asociación del parámetro.

IA 2005-06

��� ��� Introducción a LISP 1. 16

Page 17: Tema 1: Introducción a L - Dpto. Ciencias de la

Definiendo funciones

> (defun siete () (+ 4 1 2)))SIETE

r (siete) =⇒ 7

• Se evalúa siete: función definida por el usuario.

• Se evalúa la expresión que compone el cuerpo de siete:

• Se evalúa +: función primitiva de LISP para calcular la suma.

• Se evalúa 4: 4

• Se evalúa 1: 1

• Se evalúa 2: 2

• Se calcula la suma con argumentos 4, 1 y 2:

IA 2005-06

��� ��� Introducción a LISP 1. 17

Page 18: Tema 1: Introducción a L - Dpto. Ciencias de la

Editar funciones

r Abrir un editor de texto: emacs

r Escribir las diferentes expresiones en un fichero con extensión .lsp

r Pedir al intérprete que evalúe las expresiones contenidas en dichofichero: (load <fichero>)

r Compilar el fichero: (compile-file <fichero>)

IA 2005-06

��� ��� Introducción a LISP 1. 18

Page 19: Tema 1: Introducción a L - Dpto. Ciencias de la

Principios de buena programación

r Comentar los funciones definidas.

r Utilizar nombres descriptivos.

r Las funciones deben ser cortas, con pocos argumentos y tener unobjetivo claro.

r Evitar riesgos:

• Las funciones deben hacer las menos presunciones posibles y

• deben informar ante situaciones inesperadas.

r Utilizar abstracción de funciones y de datos.

r Programación modular

r La programación sin efectos colaterales es preferible aunque no obli-gatoria

IA 2005-06

��� ��� Introducción a LISP 1. 19

Page 20: Tema 1: Introducción a L - Dpto. Ciencias de la

Valores lógicos: T y NIL

r El símbolo T tiene asociado el valor lógico "verdadero".

r El símbolo NIL tiene asociado el valor lógico "falso".

• () ≡ ’() ≡ NIL

r Un predicado es una función que devuelve un valor de verdad.

> (listp ’(a b c))T> (listp 27)NIL

r Para las funciones condicionales y proposicionales cualquier elemen-to distinto de NIL tiene el valor lógico "verdadero".> (and 3 4 5)5

IA 2005-06

��� ��� Introducción a LISP 1. 20

Page 21: Tema 1: Introducción a L - Dpto. Ciencias de la

Predicados de igualdad

r (= <num1> <num2>): Igualdad numérica

r (EQ <arg1> <arg2>): Comprueba si <arg1> y <arg2> son sím-bolos (o caracteres) idénticos

.

r (EQL <arg1> <arg2>): Comprueba si sus argumentos satisfacenEQ, si no comprueba si son números del mismo tipo y valor.

r (EQUAL <arg1> <arg2>): Comprueba si sus argumentos satis-facen EQL, si no comprueba si son listas y sus elementos satisfacenEQUAL. También sirve para comparar cadenas.

r (EQUALP <arg1> <arg2>): Comprueba si sus argumentos satis-facen EQUAL, si no comprueba si son arrays o estructuras y si suselementos satisfacen EQUALP. En la igualdad numérica o de cade-nas no distingue tipos.

IA 2005-06

��� ��� Introducción a LISP 1. 21

Page 22: Tema 1: Introducción a L - Dpto. Ciencias de la

Predicados de igualdad

> (eq ’a ’A)T> (eq 3 3)T> (eq (first ’(a b c)) ’a)T> (eq 3 3.0)NIL> (eq ’(a b c) ’(a b c))NIL> (eql 3 3.0)NIL> (eql 3.0 3.0)T> (eql ’(a b) ’(a b))NIL> (equal (cons ’a ’(b)) (append ’(a) ’(b)))T

IA 2005-06

��� ��� Introducción a LISP 1. 22

Page 23: Tema 1: Introducción a L - Dpto. Ciencias de la

Operadores lógicos

r La forma especial AND

• Tiene un número arbitrario de argumentos.

• Evalúa los mismos de izquierda a derecha.

• Termina en cuanto aparece el valor NIL ("falso").

• Si no aparece devuelve el valor del último argumento.

r La forma especial OR

• Tiene un número arbitrario de argumentos.

• Evalúa los mismos de izquierda a derecha.

• Termina en cuanto aparece un valor distinto de NIL ("verdadero").

• Si no aparece devuelve NIL.

IA 2005-06

��� ��� Introducción a LISP 1. 23

Page 24: Tema 1: Introducción a L - Dpto. Ciencias de la

Operadores lógicos

(and (listp x) (> (length x) 5))

Devuelve T o NIL independientemente del valor de x.

(or (= y 0) (> (/ x y) 100))

Devuelve T si x/y es mayor que 0, incluso cuando y = 0.

IA 2005-06

��� ��� Introducción a LISP 1. 24

Page 25: Tema 1: Introducción a L - Dpto. Ciencias de la

Expresiones condicionales

r La forma especial IF:

(IF <condición><consecuencia><alternativa>)

r Evalúa <condición>:

• Si el valor es distinto de NIL ("verdadero") devuelve el valor de<consecuencia>,

• en caso contrario devuelve el valor de <alternativa>.

IA 2005-06

��� ��� Introducción a LISP 1. 25

Page 26: Tema 1: Introducción a L - Dpto. Ciencias de la

Expresiones condicionales

r La forma especial COND:

(COND <pares>)

r <pares>: sucesión de expresiones de la forma(<condicion> <consecuencia>)

siendo <consecuencia> una sucesión de expresiones LISP.

• Evalúa los elemento <condicion> hasta que aparece un valordistinto de NIL ("verdadero").

• Evalúa la correspondiente <consecuencia>. Evalúa cada unade las expresiones que la componen, devolviendo como el valorel último obtenido.

IA 2005-06

��� ��� Introducción a LISP 1. 26

Page 27: Tema 1: Introducción a L - Dpto. Ciencias de la

Expresiones condicionales

(if (= y 0) 9999999 (/ x y))

Devuelve el valor de x/y cuando y 6= 0 y 91999.999 cuando y = 0.

(cond((< x 3) (format t "Es pequeño") x)((< x 5) (format t "Es mediano") (* x 2))(t (* x x)))

IA 2005-06

��� ��� Introducción a LISP 1. 27

Page 28: Tema 1: Introducción a L - Dpto. Ciencias de la

Modelos de recursión

r Descendente numérico:

(defun f(... n ...)(if (= 0 n)

<...><... (f ... (- n 1) ...) ...>))

r Ejemplo:

(defun factorial(n)(if (= 0 n)

1(* n (factorial (- n 1)))))

IA 2005-06

��� ��� Introducción a LISP 1. 28

Page 29: Tema 1: Introducción a L - Dpto. Ciencias de la

Traza

r (TRACE <f1>...<fN>), (UNTRACE <f1>...<fN>)> (trace factorial *)(FACTORIAL *)> (factorial 2)1. Trace: (FACTORIAL ’2)2. Trace: (FACTORIAL ’1)3. Trace: (FACTORIAL ’0)3. Trace: FACTORIAL ==> 13. Trace: (* ’1 ’1)3. Trace: * ==> 12. Trace: FACTORIAL ==> 12. Trace: (* ’2 ’1)2. Trace: * ==> 21. Trace: FACTORIAL ==> 22> (untrace *)(*)> (factorial 2)1. Trace: (FACTORIAL ’2)2. Trace: (FACTORIAL ’1)3. Trace: (FACTORIAL ’0)3. Trace: FACTORIAL ==> 12. Trace: FACTORIAL ==> 11. Trace: FACTORIAL ==> 22

IA 2005-06

��� ��� Introducción a LISP 1. 29

Page 30: Tema 1: Introducción a L - Dpto. Ciencias de la

Modelos de recursión

r Listas lineales:

(defun f(... l ...)(if (endp l)

<...><... (first l)

(f ... (rest l) ...) ...>))

r Ejemplo:

(defun suma-lista(l)(if (endp l)

0(+ (first l)(suma-lista (rest l)))))

IA 2005-06

��� ��� Introducción a LISP 1. 30

Page 31: Tema 1: Introducción a L - Dpto. Ciencias de la

Modelos de recursión

r Recursión cruzada: funciones parp e imparp

(defun parp(n)(if (= n 0)

t(imparp (- n 1))))

(defun imparp(n)(if (= n 0)

nil(parp (- n 1))))

IA 2005-06

��� ��� Introducción a LISP 1. 31

Page 32: Tema 1: Introducción a L - Dpto. Ciencias de la

Variables globales y locales

r (SETF <var1> <val1>...<varM> <valM>)

> (setf a 9 b 7)7

r (LET ((<var1> <val1>)...(<varM> <valM>))

<e1>...<eN>)> (let ((a 2)(b 3)) (+ a b))5> (+ a b)16> (let ((x 2)(y (+ 1 x))) (+ x y))Error

r (LET* ((<var1> <val1>)...(<varN> <valN>))

<e1>...<eM>)> (let* ((x 2)(y (+ 1 x))) (+ x y))5

IA 2005-06

��� ��� Introducción a LISP 1. 32

Page 33: Tema 1: Introducción a L - Dpto. Ciencias de la

Número arbitrario de argumentos

> (defun lista (&rest ys) ys)LISTA> (lista 1 2 3)(1 2 3)> (lista 1 2 3 4 5 6 7 8)(1 2 3 4 5 6 7 8)

IA 2005-06

��� ��� Introducción a LISP 1. 33

Page 34: Tema 1: Introducción a L - Dpto. Ciencias de la

Argumentos clave

r (MEMBER <arg> <lista>): Comprueba si <arg> es un elementode <lista> y devuelve la <lista> a partir de la primera apariciónde <arg>.

r Por defecto compara utilizando EQL

> (member ’(a b c) ’((a) b (c d) (a b c)))NIL> (member ’(a b c) ’((a) b (c d) (a b c)) :test #’equal)((A B C))

IA 2005-06

��� ��� Introducción a LISP 1. 34

Page 35: Tema 1: Introducción a L - Dpto. Ciencias de la

Argumentos clave

> (defun f (&key x y) (list x y))F> (f :y 3 :x 5)(5 3)> (defun f (x &key y (z 2)) (list x y z))F> (f 5 :y 3 :z 4)(5 3 4)> (f 5 :z 4 :y 3)(5 3 4)> (f 5 :y 3)(5 3 2)> (f 5)(5 NIL 2)

IA 2005-06

��� ��� Introducción a LISP 1. 35

Page 36: Tema 1: Introducción a L - Dpto. Ciencias de la

Funciones como objetos

> (function +)#<SYSTEM-FUNCTION +>> (symbol-function ’+)#<SYSTEM-FUNCTION +>> #’+#<SYSTEM-FUNCTION +>> (apply #’+ ’(1 2 3))6> (funcall #’+ 1 2 3)6> (lambda (x) (+ x 100))#<CLOSURE :LAMBDA (X) (+ X 100)>> ((lambda (x) (+ x 100)) 4)104> (funcall #’(lambda (x) (+ x 100)) 4)104

IA 2005-06

��� ��� Introducción a LISP 1. 36

Page 37: Tema 1: Introducción a L - Dpto. Ciencias de la

Funciones como argumentos de entrada

r (FUNCALL <fn> <e1>...<eN>): Llamada a la función <fn> conargumentos <e1>...<eN>

(funcall #’+ 1 2 3) =⇒ 6(funcall #’(lambda (x) (* 2 x)) 3) =⇒ 6

r (APPLY <fn> <args>): Llamada a la función <fn> con argumen-tos los elementos de la lista <args>

(apply #’max ’(4 5 7)) =⇒ 7(apply #’(lambda (x y) (* 2 x y)) ’(3 4)) =⇒ 24

r (MAPCAR <fn> <l>): Lista con los resultados de las llamadas a lafunción <fn> con cada elemento de la lista <l> como argumento

(mapcar #’(lambda (x) (* x x)) ’(1 2 3 4 5)) =⇒ (1 4 9 16 25)(mapcar #’atom ’(a (b) 3)) =⇒ (T NIL T)

IA 2005-06

��� ��� Introducción a LISP 1. 37

Page 38: Tema 1: Introducción a L - Dpto. Ciencias de la

Funciones

r Observaciones:

• La función como argumento debe ser una expresión cuyo valorsea una función.

• Uso de #’ para forzar a obtener el valor funcional.

• A veces es necesario symbol-function.

IA 2005-06

��� ��� Introducción a LISP 1. 38

Page 39: Tema 1: Introducción a L - Dpto. Ciencias de la

Funciones de Entrada-Salida

r (FORMAT <destino> <cadena de control> <x1>...<xN>))> (format t "~a mas ~a igual a ~a. ~%" 2 3 (+ 2 3))2 mas 3 igual a 5.NIL

r (READ)> (read)(+ 2 2)

(+ 2 2)> (eval (read))(+ 2 2)

4> (defun pide (frase)

(format t "~a " frase)(read))

PIDE> (pide "Su edad, por favor:")Su edad, por favor: 2323

IA 2005-06

��� ��� Introducción a LISP 1. 39

Page 40: Tema 1: Introducción a L - Dpto. Ciencias de la

Matrices

r Creación: (MAKE-ARRAY <dimensiones>)

> (make-array ’(2 2))#2A((NIL NIL) (NIL NIL))> (make-array ’(2 2 1))#3A(((NIL) (NIL)) ((NIL) (NIL)))> (make-array ’(2 2) :initial-element 2)#2A((2 2) (2 2))> (make-array ’(3 3)

:initial-contents ’((a b c)(1 2 3)(x y z)))

#2A((A B C) (1 2 3) (X Y Z))

IA 2005-06

��� ��� Introducción a LISP 1. 40

Page 41: Tema 1: Introducción a L - Dpto. Ciencias de la

Matrices

r Acceso: (AREF <matriz> <i1>...<iN>)

> (setf *matriz*(make-array ’(3 3)

:initial-contents ’((a b c)(1 2 3)(x y z))))

#2A((A B C) (1 2 3) (X Y Z))> *matriz*#2A((A B C) (1 2 3) (X Y Z))> (aref *matriz* 0 0)A> (aref *matriz* 1 1)2

IA 2005-06

��� ��� Introducción a LISP 1. 41

Page 42: Tema 1: Introducción a L - Dpto. Ciencias de la

Matrices

r Modificación:(SETF (AREF <matriz> <i1...<iN>) <expresion>)> *matriz*#2A((A B C) (1 2 3) (X Y Z))> (setf (aref *matriz* 1 2) ’h)H> (setf (aref *matriz* 1 1) 4)4> *matriz*#2A((A B C) (1 4 H) (X Y Z))

IA 2005-06

��� ��� Introducción a LISP 1. 42

Page 43: Tema 1: Introducción a L - Dpto. Ciencias de la

Estructuras (ejemplo)

> (defstruct persona(nombre nil)(estado ’casado)(calle nil)(ciudad ’Sevilla))

PERSONA> (setf ejemplo-1

(make-persona :nombre ’ana :calle ’(Reina Mercedes)))#S(PERSONA :NOMBRE ANA :ESTADO CASADO :CALLE (REINA MERCEDES)

:CIUDAD SEVILLA)> (setf ejemplo-2

(make-persona :nombre ’pepe :ciudad ’Huelva))#S(PERSONA :NOMBRE PEPE :ESTADO CASADO :CALLE NIL

:CIUDAD HUELVA)> (persona-ciudad ejemplo-1)SEVILLA> (persona-nombre ejemplo-2)PEPE> (setf (persona-nombre ejemplo-1) ’(Ana Maria))(ANA MARIA)> ejemplo-1#S(PERSONA :NOMBRE (ANA MARIA) :ESTADO CASADO

:CALLE (REINA MERCEDES) :CIUDAD SEVILLA)

IA 2005-06

��� ��� Introducción a LISP 1. 43

Page 44: Tema 1: Introducción a L - Dpto. Ciencias de la

Estructuras (ejemplo)

> (setf ejemplo-3 ejemplo-1)#S(PERSONA :NOMBRE (ANA MARIA) :ESTADO CASADO

:CALLE (REINA MERCEDES) :CIUDAD SEVILLA)> (setf (persona-calle ejemplo-3) ’(tetuan))(TETUAN)> ejemplo-3#S(PERSONA :NOMBRE (ANA MARIA) :ESTADO CASADO

:CALLE (TETUAN) :CIUDAD SEVILLA)> ejemplo-1#S(PERSONA :NOMBRE (ANA MARIA) :ESTADO CASADO

:CALLE (TETUAN) :CIUDAD SEVILLA)> (setf ejemplo-4 (copy-persona ejemplo-2))#S(PERSONA :NOMBRE PEPE :ESTADO CASADO :CALLE NIL

:CIUDAD HUELVA)> (setf (persona-ciudad ejemplo-4) ’cadiz)CADIZ> ejemplo-4#S(PERSONA :NOMBRE PEPE :ESTADO CASADO :CALLE NIL

:CIUDAD CADIZ)> ejemplo-2#S(PERSONA :NOMBRE PEPE :ESTADO CASADO :CALLE NIL

:CIUDAD HUELVA)

IA 2005-06

��� ��� Introducción a LISP 1. 44

Page 45: Tema 1: Introducción a L - Dpto. Ciencias de la

Creación de estructuras

r(DEFSTRUCT (<nombre> (:CONSTRUCTOR <función constructura>)(:CONC-NAME <prefijo>)(:PRINT-FUNCTION <función de escritura>))

<campo1>...<campoN>)

r Ejemplo:

(defstruct (punto (:constructor crea-punto)(:conc-name coordenada-)(:print-function escribe-punto)

xy)

(defun escribe-punto (punto &optional (canal t) profundidad)(format canal "Punto de abcisa ~a y ordenada ~a"

(coordenada-x punto)(coordenada-y punto)))

IA 2005-06

��� ��� Introducción a LISP 1. 45

Page 46: Tema 1: Introducción a L - Dpto. Ciencias de la

Estructuras (ejemplo)

> (setf *punto-1* (crea-punto :x 2 :y 3))Punto de abcisa 2 y ordenada 3> (coordenada-y *punto-1*)3> (setf (coordenada-y *punto-1*) 5)5> *punto-1*Punto de abcisa 2 y ordenada 5> (punto-p *punto-1*)T> (punto-p ’(2 5))NIL

IA 2005-06

��� ��� Introducción a LISP 1. 46

Page 47: Tema 1: Introducción a L - Dpto. Ciencias de la

Estructuras (ejemplo)

> (setf *punto-2* (copy-punto *punto-1*))Punto de abcisa 2 y ordenada 5> (equal *punto-1* *punto-2*)NIL> (equalp *punto-1* *punto-2*)T> (setf (coordenada-y *punto-2*) 3)3> *punto-2*Punto de abcisa 2 y ordenada 3> (setf *punto-3* (crea-punto :y 3 :x 2))Punto de abcisa 2 y ordenada 3> (equalp *punto-2* *punto-3*)T

IA 2005-06

��� ��� Introducción a LISP 1. 47

Page 48: Tema 1: Introducción a L - Dpto. Ciencias de la

Bibliografía

r Steele, G.L. Common Lisp the Language, 2nd edition (D. P., 1990).http://www.cs.cmu.edu/afs/cs.cmu.edu/project/-

ai-repository/ai/html/cltl/cltl2.html

r Winston, P.H. y Horn, B.K. LISP (3a. ed.) (Addison–Wesley, 1991).

r Graham, P. ANSI Common Lisp (Prentice Hall, 1996).

IA 2005-06

��� ��� Introducción a LISP 1. 48