mg. samuel oporto díaz lisp inteligencia artificial

39
Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

Upload: mayte-roso

Post on 01-Jan-2015

23 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

Mg. Samuel Oporto Díaz

LISP

INTELIGENCIA ARTIFICIAL

Page 2: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

22/37/37

Mapa Conceptual del Curso

Page 3: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

33/37/37

Tabla de Contenido

1. Procesamiento Básico

2. Funciones en LISP

3. Recursión

4. Ejemplos

5. Conclusiones

6. Bibliografía

Page 4: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

44/37/37

Objetivos• Exponer los conceptos básicos del LISP.• Presentar las expresiones-s, los átomos y las listas.• Presentar las funciones básicas del LISP.• Crear nuevas funciones en LISP.• Recursión.

Page 5: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

55/37/37

PROCESAMIENTO BÁSICO DE LISTAS

Page 6: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

66/37/37

LISP un lenguaje simple1. Únicamente dos tipos de objetos:

– átomos (identificadores/constantes) robot green 12.5– listas (de átomos o listas) (1 2 3.14) (robot (color green) (weight 100))

Las listas almacenan diferentes tipos de datos, no contiguos y sin acceso aleatorio)

2. Las funciones y llamadas a funciones son representadas como listas (programa = data) – (define (square x) (* x x))

3. Todos los cálculos son ejecutados mediante la aplicación de funciones a sus argumentos, como listas:– (+ 2 3) > 5– (square 5) > 25– (car (reverse '(a b c))) > c

Page 7: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

77/37/37

Procesamiento Básico de Listas• FIRST (CAR).- toma una lista como argumento y regresa el

primer elemento

• REST (CDR).- toma una lista como argumento y regresa una lista sin el primer elemento

• CONS.- toma dos argumentos (normalmente el segundo es una lista) y regresa una lista con el primer argumento como primer elemento de la lista.

• NULL.- checa si una lista está vacía

• LISTP.- checa si el argumento es una lista o no.

Page 8: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

88/37/37

Ejercicio 1

Escriba una expresión Lisp aplicando first y rests a la siguiente lista de tal manera que se obtenga el símbolo X y el símbolo Y

– (A (B ((X))) (C) (((Y)) E ))

– ((A B) (C D) (E F) (H (I X)(J L) Y))

– (A B (C D E (F G H) (I J X (L M Y))))

– (A B C (() () ((nil (X)))) ()()(((Y)))())

Page 9: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

99/37/37

Ejercicios 2• Representa el siguiente árbol mediante una lista.• Extrae mediante las funciones FIRST Y REST, las

ocurrencias del número 6

+

9 6 2 *

-3 5

6 2

6

Page 10: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

1010/37/37

Listado de funciones

Construcción de Listas(cons a L)

(cons 'h '(o l a))

(append L L)

(append '(e s t a m o s) '(f e l i c e s))

(list a a)

(list 'd 'e 'c 'o 'n 'o 'c 'e 'r 'e 'l 'l 'i 's 'p)

Page 11: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

1111/37/37

Ejemplo(cons a L) Crea una lista, desde un átomo y una lista

  (cons ‘a ‘(b c d)) (a b c d)

  (cons nil '(a b c)) (NIL A B C)

(append(L L) Crea una lista, con los elementos de las listas

  (append ‘(a b) ‘(c d)) (a b c d)

  (append '() '(a b c)) (A B C)

  (append nil '(a b c)) (A B C)

(list L L) Crea una lista, cada lista es un elemento de la lista

  (list ‘(a b) ‘(c d)) ((a b) (c d))

  (list '(a b) nil '(c d)) ((a b) nil (c d))

  (list '(a b) '() '(c d)) ((a b) nil (c d))

Page 12: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

1212/37/37

Ejercicio 3• Construye las listas de los siguientes árboles y luego

“arma” la siguiente lista, haga uso de las funciones para construir listas

/

*

-3 5

6 -

6

6 2

*

6 2 /

- +

6 2 6 2

/

+ -

A B A B

A B

Page 13: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

1313/37/37

Asignación de valores

Asignación de valores(setf x 2)

(setq x 4)

Page 14: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

1414/37/37

FUNCIONES EN LISP

Page 15: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

1515/37/37

Definición de Funciones• LISP permite definir funciones y asignarles un nombre.

defun

• defun asocia a un símbolo (la función) un conjunto de sentencias, en las cuales se pueden utilizar una serie de parámetros formales declarados al inicio de la función.

• Al llamar a la función definida con defun se debe proporcionar los valores concretos con los que sustituir esos parámetros formales en la evaluación de las sentencias del cuerpo de la función.

• Tras terminar la evaluación del cuerpo de la función, el control del programa vuelve al lugar en donde se realizó la llamada.

Page 16: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

1616/37/37

Definición de funciones en LISP(defun <function-name> (<par-1> .... <par-n>)

<S-expression-1>

<S-expression-2>

....

<S-expression-m>

)

Page 17: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

1717/37/37

Ejemplo de Función

(defun third-element (items)

(first (rest (rest items))))

> (third-element ‘(1 2 3 4 5))

3

Page 18: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

1818/37/37

Condiciones(cond (<test-1> <action-1.1> .... <action-1.n1>)

(<test-2> <action-2.1> .... <action-2.n2>)

....

(<test-m> <action-m.1> ....<action-m.nm>)

)

Page 19: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

1919/37/37

Funciones Lógicas• not toma un argumento y regresa t si es nil, o regresa nil

de otra manera.

• and toma cualquier número de argumentos y regresa nil si alguno de sus argumentos es nil, de otra manera regresa un no-nil.

• or toma cualquier número de argumentos y regresa nil si todos sus argumentos son nil, de otra manera regresa un no-nil.

Page 20: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

2020/37/37

RECURSION

Page 21: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

2121/37/37

RecursiónAl construir una función, es posible confiar en esa definición para usarla como parámetro en la misma función.

(defun (multiply (x y)

(cond ((= x 0) 0)

(t (+ y (multiply (- x 1) y)

)

)

)

)

Page 22: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

2222/37/37

Recursión

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

Page 23: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

2323/37/37

ITERACION Y RECURSION

Page 24: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

2424/37/37

Iteración y Recursión• Iteración.• Es la implementación de un algoritmo mediante ciclos:

WHILE, FOR, REPEAT.

• Recursión• Es la implementación de un algoritmo mediante sub-

programas que se llaman a si mismos.

Equivalencia de Iteración y Recursión:Cualquier programa recursivo puede expresarse de forma iterativa y viceversa.

Page 25: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

2525/37/37

Ejemplos

Una función es recursiva si su resolución (FACT(n)) requiere la solución previa de la misma función (FACT) para casos más sencillos (FACT(n -1))

ITERATIVA

0)1(*

01)(

nnFACTn

nnFACT

0

01)(

1

ni

nnFACT

n

i

RECURSIVA

Page 26: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

2626/37/37

Tipos de Recursión1. RECURSIÓN LINEAL: si cada llamada recursiva genera, a

lo más, otra llamada recursiva No por la cola (No por el final): el resultado de la llamada recursiva

NO es el resultado del método recursivo (not tail recursion) Por la cola (Por el final): el resultado de la llamada recursiva es el

resultado del método recursivo (with tail recursion)

2. RECURSIÓN MÚLTIPLE: si alguna llamada puede generar más de una llamada recursiva

Page 27: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

2727/37/37

Ejemplo - factorialpublic int iterative(int n) {

int fact = 1;

for (int i = 1; i <= n; i++)

fact *= i;

return fact;

}

public int tail(int n) { return _tail(n, 1);}

private int _tail(int n, int fact) { if (n <= 0) { return fact; } else { return _tail(n - 1, n * fact); }}

public int notail(int n) { if (n <= 0) return 1; else return n * notail(n - 1);}

Page 28: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

2828/37/37

Iterative(defun factorial (n) (let ((fact 1) ) (dotimes (i n) (setf fact (* fact (+ i 1))) ) fact ))

> (trace factorial)(FACTORIAL)

> (factorial 4)0 FACTORIAL > (4) >> N : 40 FACTORIAL < (24)24

Page 29: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

2929/37/37

not tail recursion(defun factorial (x) (cond ((null x) nil ) ((<= x 1) 1 ) (T (* x (factorial (- x 1))) ) ))

> (trace factorial)(FACTORIAL)

> (factorial 4)0 FACTORIAL > (4) >> X : 4 1 FACTORIAL > (3) >> X : 3 2 FACTORIAL > (2) >> X : 2 3 FACTORIAL > (1) >> X : 1 3 FACTORIAL < (1) 2 FACTORIAL < (2) 1 FACTORIAL < (6)0 FACTORIAL < (24)24

Page 30: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

3030/37/37

tail recursion(defun factorial (x) (cond ((null x) nil) ((<= x 1) 1 ) (T (factorial_ x 1)) ))

(defun factorial_ (x fact) (cond ((= x 1) fact ) (T (factorial_ (- x 1) (* x fact) ) ) ))

> (trace factorial )(FACTORIAL)

> (trace factorial_ )(FACTORIAL_ FACTORIAL)

> (factorial 4 )0 FACTORIAL > (4) >> X : 4 1 FACTORIAL_ > (4 1) >> X : 4 >> FACT : 1 1 FACTORIAL_ < (24)0 FACTORIAL < (24)24

Page 31: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

3131/37/37

EJEMPLOS

Page 32: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

3232/37/37

Ejercicio 4 (LENGTH)• Implemente la función LENGTH usando sólo las funciones

de manipulación de listas y aritméticas

(defun len (L) (len-sub L 0))

(defun len-sub (L S) (cond ((null L) S ) (t (len-sub (cdr L) (+ S 1)) ) ))

Page 33: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

3333/37/37

Ejercicio 5 (REMOVE)• Implemente la función REMOVE usando sólo las funciones

de manipulación de listas y aritméticas.

(defun remov (L a) (remov-sub L a nil))

(defun remov-sub (L a S) (cond ((null L) S ) ((equal a (first L)) (remov-sub (rest L) a S) ) ( t (remov-sub (rest L) a (append S (list (first L)))) ) ))

Page 34: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

3434/37/37

Ejercicio 6 (APPEND)• Implemente la función APPEND usando sólo las funciones

de manipulación de listas y aritméticas.

Page 35: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

3535/37/37

Ejercicio 7 (COUNT-A)• Construya una función llamada COUNT_A que tome un

argumento (que puede ser lista o átomo) y regrese un número entero que indique el número de elemento atómicos que existe en la estructura.

Page 36: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

3636/37/37

CONCLUSIONES

Page 37: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

3737/37/37

Conclusiones LISP es un lenguaje de alto nivel de tipo funcional que es LISP es un lenguaje de alto nivel de tipo funcional que es

utilizado en múltiples aplicaciones de IAutilizado en múltiples aplicaciones de IA

LISP se basa en manejo de listas y tiene desde LISP se basa en manejo de listas y tiene desde funciones simples hasta estructuras de datosfunciones simples hasta estructuras de datos

Page 38: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

3838/37/37

Bibliografía• LISP

Winston and HornAddison Wesley

• The Little LisperDaniel Friedman and Mathias FelleisenSRA

• Apuntes de LISPGraeme Ritchie

Page 39: Mg. Samuel Oporto Díaz LISP INTELIGENCIA ARTIFICIAL

3939/37/37

PREGUNTAS