Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

69
Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL

Transcript of Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

Page 1: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

Mg Samuel Oporto Diacuteaz Lima 14 de mayo 2005

LISP

INTELIGENCIA ARTIFICIAL

22 6969

Tabla de Contenido1 Historia2 Introduccioacuten3 Expresiones y Aacutetomos4 Listas5 Funciones6 Evaluacioacuten de Expresiones7 Procesamiento Baacutesico8 Funciones en LISP9 Recursioacuten10 Ejemplos11 Conclusiones12 Bibliografiacutea

33 6969

Objetivosbull Exponer los conceptos baacutesicos del LISPbull Presentar las expresiones-s los aacutetomos y las listasbull Presentar las funciones baacutesicas del LISPbull Crear nuevas funciones en LISPbull Recursioacuten

44 6969

HISTORIA

55 6969

Historiabull Creado por John McCarthybull Responsable de introducir el teacutermino ldquointeligencia

Artificialrdquo lo hizo en la Conferencia de Dartmouth en 1955bull McCarthy inventoacute el lenguaje de programacioacuten Lisp y

publicoacute su disentildeo en Comunicaciones del ACM en 1960 bull El primer Lisp se desarrolloacute en una IBM-704 y en 1962

aparecioacute la versioacuten 15 bull A mediados de los 60s MIT desarrolloacute MacLisp Xerox -

Interlisp Stanford - UCI Lisp bull En los 70s G Steele y G Sussman - Scheme bull En los 80s - Common Lisp

66 6969

INSTRODUCCION

77 6969

Aspectos Generalesbull Lisp es un lenguaje

ndash orientado a computacioacuten no-numeacuterica ndash lenguaje interactivo

bull La programacioacuten funcional usa definiciones de funciones y llamadas de funciones como las uacutenicas construcciones de programacioacuten

bull Una funcioacuten pura toma ciertos argumentos y regresa un resultado nada mas (no tiene efectos secundarios en el ambiente)

(funcioacuten arg1 arg2 )

88 6969

Aspectos Generalesbull LISP puede usa recursioacuten evita datos y asignaciones

globales pero la IO es difiacutecil

bull Basado en el caacutelculo Lambda (A Church) eg

LISP (LISt Processor)

99 6969

Por queacute Lispbull En LISP los programas y datos usan la misma

estructura lo que permite escribir programas que escriban programas

bull Se pueden desarrollar prototipos raacutepidamente bull Se pueden probar programas y funciones aisladas bull En otros lenguajes las variables tienen un tipo asociado

(no se puede usar una variable sin especificar su tipo)bull En Lisp los valores tienen tipos no las variables

(manifest typing) a diferencia (implicit typing)bull Tiene un garbage collector o recolector de basura y

manejo de memoria automaacutetico

1010 6969

iquestPor queacute Lispbull Se pueden escribir programas que realicen tareas que

no se pueden hacer en otros lenguajes

gt (defun sumaN (n) (lambda(x) (+ x n)))

gt (setf suma3 (sumaN 3))

gt (funcall suma3 4) 7

bull Se ha utilizado en el desarrollo de sistemas complejos EMACS AutoCad MACSYMA etc

FUNCALL llama a una funcioacuten con varias entradas(funcall cons a (b c))

(A B C)

1111 6969

Computacioacuten Simboacutelicabull Las reglas leacutexicas son mucho maacutes simples en LISP

Solo hay pareacutentesis comillas (sencilla doble y backquote) espacios y comas El punto y coma no separa expresiones (no es necesario debido a los pareacutentesis) sino que inicia comentarios

bull LISP permite la manipulacioacuten de siacutembolos y la construccioacuten de estructuras de datos complejas a partior de ellos

gt (append (Carlos Antonio) (Carmen Rosa))(CARLOS ANTONIO CARMEN ROSA)

1212 6969

Computacioacuten Simboacutelicabull La parte extrantildea es el () que sirve para bloquear la

evaluacioacuten de una expresioacuten y devolverla literalmente

gt (Carlos Antonio)1048774 (CARLOS ANTONIO)gt A1048774 Agt 21048774 2

gt AError A is not a bound variable

gt (Luis lsquoMaria)Error Luis is not a function

gt 22

gt (+ 2 2)(+ 2 2)

gt (+ 2 2)4

1313 6969

Computacioacuten Simboacutelicabull Los caacutelculos simboacutelicos y numeacutericos se pueden mezclargt (+ 2 (length (a b c d)))

6

bull LISP no otorga semaacutentica a los siacutembolos que manipulabull LISP contiene un conjunto de funciones predefinidas que

es necesario conocer Como + append length

bull Los siacutembolos en LISP no son casesensitive

bull Muchos signos de puntuacioacuten son autorizados para formar parte de los siacutembolos $lt=gt

1414 6969

EXPRESIONES-S Y ATOMOS

1515 6969

Expresiones-SEstructuras con la que trabaja Lisp y estaacuten formadas porbull Aacutetomosbull Estructuras de la forma (S1 S2) cada celda tiene dos

partes llamadas CAR (S1) y CDR (S2) (1 2) (1 (2 3)) (D1 (D2 (D3 (DN())))

Hay una notacioacuten abreviadandash Los elementos no estaacuten en parejas es decir desaparecen los ( )ndash El punto se sustituye por un espacio en blancondash Se obvia la segunda parte de la cadena de estructuras

simboacutelicas que contiene NIL

(D1 D2 D3 DN)

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 2: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

22 6969

Tabla de Contenido1 Historia2 Introduccioacuten3 Expresiones y Aacutetomos4 Listas5 Funciones6 Evaluacioacuten de Expresiones7 Procesamiento Baacutesico8 Funciones en LISP9 Recursioacuten10 Ejemplos11 Conclusiones12 Bibliografiacutea

33 6969

Objetivosbull Exponer los conceptos baacutesicos del LISPbull Presentar las expresiones-s los aacutetomos y las listasbull Presentar las funciones baacutesicas del LISPbull Crear nuevas funciones en LISPbull Recursioacuten

44 6969

HISTORIA

55 6969

Historiabull Creado por John McCarthybull Responsable de introducir el teacutermino ldquointeligencia

Artificialrdquo lo hizo en la Conferencia de Dartmouth en 1955bull McCarthy inventoacute el lenguaje de programacioacuten Lisp y

publicoacute su disentildeo en Comunicaciones del ACM en 1960 bull El primer Lisp se desarrolloacute en una IBM-704 y en 1962

aparecioacute la versioacuten 15 bull A mediados de los 60s MIT desarrolloacute MacLisp Xerox -

Interlisp Stanford - UCI Lisp bull En los 70s G Steele y G Sussman - Scheme bull En los 80s - Common Lisp

66 6969

INSTRODUCCION

77 6969

Aspectos Generalesbull Lisp es un lenguaje

ndash orientado a computacioacuten no-numeacuterica ndash lenguaje interactivo

bull La programacioacuten funcional usa definiciones de funciones y llamadas de funciones como las uacutenicas construcciones de programacioacuten

bull Una funcioacuten pura toma ciertos argumentos y regresa un resultado nada mas (no tiene efectos secundarios en el ambiente)

(funcioacuten arg1 arg2 )

88 6969

Aspectos Generalesbull LISP puede usa recursioacuten evita datos y asignaciones

globales pero la IO es difiacutecil

bull Basado en el caacutelculo Lambda (A Church) eg

LISP (LISt Processor)

99 6969

Por queacute Lispbull En LISP los programas y datos usan la misma

estructura lo que permite escribir programas que escriban programas

bull Se pueden desarrollar prototipos raacutepidamente bull Se pueden probar programas y funciones aisladas bull En otros lenguajes las variables tienen un tipo asociado

(no se puede usar una variable sin especificar su tipo)bull En Lisp los valores tienen tipos no las variables

(manifest typing) a diferencia (implicit typing)bull Tiene un garbage collector o recolector de basura y

manejo de memoria automaacutetico

1010 6969

iquestPor queacute Lispbull Se pueden escribir programas que realicen tareas que

no se pueden hacer en otros lenguajes

gt (defun sumaN (n) (lambda(x) (+ x n)))

gt (setf suma3 (sumaN 3))

gt (funcall suma3 4) 7

bull Se ha utilizado en el desarrollo de sistemas complejos EMACS AutoCad MACSYMA etc

FUNCALL llama a una funcioacuten con varias entradas(funcall cons a (b c))

(A B C)

1111 6969

Computacioacuten Simboacutelicabull Las reglas leacutexicas son mucho maacutes simples en LISP

Solo hay pareacutentesis comillas (sencilla doble y backquote) espacios y comas El punto y coma no separa expresiones (no es necesario debido a los pareacutentesis) sino que inicia comentarios

bull LISP permite la manipulacioacuten de siacutembolos y la construccioacuten de estructuras de datos complejas a partior de ellos

gt (append (Carlos Antonio) (Carmen Rosa))(CARLOS ANTONIO CARMEN ROSA)

1212 6969

Computacioacuten Simboacutelicabull La parte extrantildea es el () que sirve para bloquear la

evaluacioacuten de una expresioacuten y devolverla literalmente

gt (Carlos Antonio)1048774 (CARLOS ANTONIO)gt A1048774 Agt 21048774 2

gt AError A is not a bound variable

gt (Luis lsquoMaria)Error Luis is not a function

gt 22

gt (+ 2 2)(+ 2 2)

gt (+ 2 2)4

1313 6969

Computacioacuten Simboacutelicabull Los caacutelculos simboacutelicos y numeacutericos se pueden mezclargt (+ 2 (length (a b c d)))

6

bull LISP no otorga semaacutentica a los siacutembolos que manipulabull LISP contiene un conjunto de funciones predefinidas que

es necesario conocer Como + append length

bull Los siacutembolos en LISP no son casesensitive

bull Muchos signos de puntuacioacuten son autorizados para formar parte de los siacutembolos $lt=gt

1414 6969

EXPRESIONES-S Y ATOMOS

1515 6969

Expresiones-SEstructuras con la que trabaja Lisp y estaacuten formadas porbull Aacutetomosbull Estructuras de la forma (S1 S2) cada celda tiene dos

partes llamadas CAR (S1) y CDR (S2) (1 2) (1 (2 3)) (D1 (D2 (D3 (DN())))

Hay una notacioacuten abreviadandash Los elementos no estaacuten en parejas es decir desaparecen los ( )ndash El punto se sustituye por un espacio en blancondash Se obvia la segunda parte de la cadena de estructuras

simboacutelicas que contiene NIL

(D1 D2 D3 DN)

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 3: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

33 6969

Objetivosbull Exponer los conceptos baacutesicos del LISPbull Presentar las expresiones-s los aacutetomos y las listasbull Presentar las funciones baacutesicas del LISPbull Crear nuevas funciones en LISPbull Recursioacuten

44 6969

HISTORIA

55 6969

Historiabull Creado por John McCarthybull Responsable de introducir el teacutermino ldquointeligencia

Artificialrdquo lo hizo en la Conferencia de Dartmouth en 1955bull McCarthy inventoacute el lenguaje de programacioacuten Lisp y

publicoacute su disentildeo en Comunicaciones del ACM en 1960 bull El primer Lisp se desarrolloacute en una IBM-704 y en 1962

aparecioacute la versioacuten 15 bull A mediados de los 60s MIT desarrolloacute MacLisp Xerox -

Interlisp Stanford - UCI Lisp bull En los 70s G Steele y G Sussman - Scheme bull En los 80s - Common Lisp

66 6969

INSTRODUCCION

77 6969

Aspectos Generalesbull Lisp es un lenguaje

ndash orientado a computacioacuten no-numeacuterica ndash lenguaje interactivo

bull La programacioacuten funcional usa definiciones de funciones y llamadas de funciones como las uacutenicas construcciones de programacioacuten

bull Una funcioacuten pura toma ciertos argumentos y regresa un resultado nada mas (no tiene efectos secundarios en el ambiente)

(funcioacuten arg1 arg2 )

88 6969

Aspectos Generalesbull LISP puede usa recursioacuten evita datos y asignaciones

globales pero la IO es difiacutecil

bull Basado en el caacutelculo Lambda (A Church) eg

LISP (LISt Processor)

99 6969

Por queacute Lispbull En LISP los programas y datos usan la misma

estructura lo que permite escribir programas que escriban programas

bull Se pueden desarrollar prototipos raacutepidamente bull Se pueden probar programas y funciones aisladas bull En otros lenguajes las variables tienen un tipo asociado

(no se puede usar una variable sin especificar su tipo)bull En Lisp los valores tienen tipos no las variables

(manifest typing) a diferencia (implicit typing)bull Tiene un garbage collector o recolector de basura y

manejo de memoria automaacutetico

1010 6969

iquestPor queacute Lispbull Se pueden escribir programas que realicen tareas que

no se pueden hacer en otros lenguajes

gt (defun sumaN (n) (lambda(x) (+ x n)))

gt (setf suma3 (sumaN 3))

gt (funcall suma3 4) 7

bull Se ha utilizado en el desarrollo de sistemas complejos EMACS AutoCad MACSYMA etc

FUNCALL llama a una funcioacuten con varias entradas(funcall cons a (b c))

(A B C)

1111 6969

Computacioacuten Simboacutelicabull Las reglas leacutexicas son mucho maacutes simples en LISP

Solo hay pareacutentesis comillas (sencilla doble y backquote) espacios y comas El punto y coma no separa expresiones (no es necesario debido a los pareacutentesis) sino que inicia comentarios

bull LISP permite la manipulacioacuten de siacutembolos y la construccioacuten de estructuras de datos complejas a partior de ellos

gt (append (Carlos Antonio) (Carmen Rosa))(CARLOS ANTONIO CARMEN ROSA)

1212 6969

Computacioacuten Simboacutelicabull La parte extrantildea es el () que sirve para bloquear la

evaluacioacuten de una expresioacuten y devolverla literalmente

gt (Carlos Antonio)1048774 (CARLOS ANTONIO)gt A1048774 Agt 21048774 2

gt AError A is not a bound variable

gt (Luis lsquoMaria)Error Luis is not a function

gt 22

gt (+ 2 2)(+ 2 2)

gt (+ 2 2)4

1313 6969

Computacioacuten Simboacutelicabull Los caacutelculos simboacutelicos y numeacutericos se pueden mezclargt (+ 2 (length (a b c d)))

6

bull LISP no otorga semaacutentica a los siacutembolos que manipulabull LISP contiene un conjunto de funciones predefinidas que

es necesario conocer Como + append length

bull Los siacutembolos en LISP no son casesensitive

bull Muchos signos de puntuacioacuten son autorizados para formar parte de los siacutembolos $lt=gt

1414 6969

EXPRESIONES-S Y ATOMOS

1515 6969

Expresiones-SEstructuras con la que trabaja Lisp y estaacuten formadas porbull Aacutetomosbull Estructuras de la forma (S1 S2) cada celda tiene dos

partes llamadas CAR (S1) y CDR (S2) (1 2) (1 (2 3)) (D1 (D2 (D3 (DN())))

Hay una notacioacuten abreviadandash Los elementos no estaacuten en parejas es decir desaparecen los ( )ndash El punto se sustituye por un espacio en blancondash Se obvia la segunda parte de la cadena de estructuras

simboacutelicas que contiene NIL

(D1 D2 D3 DN)

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 4: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

44 6969

HISTORIA

55 6969

Historiabull Creado por John McCarthybull Responsable de introducir el teacutermino ldquointeligencia

Artificialrdquo lo hizo en la Conferencia de Dartmouth en 1955bull McCarthy inventoacute el lenguaje de programacioacuten Lisp y

publicoacute su disentildeo en Comunicaciones del ACM en 1960 bull El primer Lisp se desarrolloacute en una IBM-704 y en 1962

aparecioacute la versioacuten 15 bull A mediados de los 60s MIT desarrolloacute MacLisp Xerox -

Interlisp Stanford - UCI Lisp bull En los 70s G Steele y G Sussman - Scheme bull En los 80s - Common Lisp

66 6969

INSTRODUCCION

77 6969

Aspectos Generalesbull Lisp es un lenguaje

ndash orientado a computacioacuten no-numeacuterica ndash lenguaje interactivo

bull La programacioacuten funcional usa definiciones de funciones y llamadas de funciones como las uacutenicas construcciones de programacioacuten

bull Una funcioacuten pura toma ciertos argumentos y regresa un resultado nada mas (no tiene efectos secundarios en el ambiente)

(funcioacuten arg1 arg2 )

88 6969

Aspectos Generalesbull LISP puede usa recursioacuten evita datos y asignaciones

globales pero la IO es difiacutecil

bull Basado en el caacutelculo Lambda (A Church) eg

LISP (LISt Processor)

99 6969

Por queacute Lispbull En LISP los programas y datos usan la misma

estructura lo que permite escribir programas que escriban programas

bull Se pueden desarrollar prototipos raacutepidamente bull Se pueden probar programas y funciones aisladas bull En otros lenguajes las variables tienen un tipo asociado

(no se puede usar una variable sin especificar su tipo)bull En Lisp los valores tienen tipos no las variables

(manifest typing) a diferencia (implicit typing)bull Tiene un garbage collector o recolector de basura y

manejo de memoria automaacutetico

1010 6969

iquestPor queacute Lispbull Se pueden escribir programas que realicen tareas que

no se pueden hacer en otros lenguajes

gt (defun sumaN (n) (lambda(x) (+ x n)))

gt (setf suma3 (sumaN 3))

gt (funcall suma3 4) 7

bull Se ha utilizado en el desarrollo de sistemas complejos EMACS AutoCad MACSYMA etc

FUNCALL llama a una funcioacuten con varias entradas(funcall cons a (b c))

(A B C)

1111 6969

Computacioacuten Simboacutelicabull Las reglas leacutexicas son mucho maacutes simples en LISP

Solo hay pareacutentesis comillas (sencilla doble y backquote) espacios y comas El punto y coma no separa expresiones (no es necesario debido a los pareacutentesis) sino que inicia comentarios

bull LISP permite la manipulacioacuten de siacutembolos y la construccioacuten de estructuras de datos complejas a partior de ellos

gt (append (Carlos Antonio) (Carmen Rosa))(CARLOS ANTONIO CARMEN ROSA)

1212 6969

Computacioacuten Simboacutelicabull La parte extrantildea es el () que sirve para bloquear la

evaluacioacuten de una expresioacuten y devolverla literalmente

gt (Carlos Antonio)1048774 (CARLOS ANTONIO)gt A1048774 Agt 21048774 2

gt AError A is not a bound variable

gt (Luis lsquoMaria)Error Luis is not a function

gt 22

gt (+ 2 2)(+ 2 2)

gt (+ 2 2)4

1313 6969

Computacioacuten Simboacutelicabull Los caacutelculos simboacutelicos y numeacutericos se pueden mezclargt (+ 2 (length (a b c d)))

6

bull LISP no otorga semaacutentica a los siacutembolos que manipulabull LISP contiene un conjunto de funciones predefinidas que

es necesario conocer Como + append length

bull Los siacutembolos en LISP no son casesensitive

bull Muchos signos de puntuacioacuten son autorizados para formar parte de los siacutembolos $lt=gt

1414 6969

EXPRESIONES-S Y ATOMOS

1515 6969

Expresiones-SEstructuras con la que trabaja Lisp y estaacuten formadas porbull Aacutetomosbull Estructuras de la forma (S1 S2) cada celda tiene dos

partes llamadas CAR (S1) y CDR (S2) (1 2) (1 (2 3)) (D1 (D2 (D3 (DN())))

Hay una notacioacuten abreviadandash Los elementos no estaacuten en parejas es decir desaparecen los ( )ndash El punto se sustituye por un espacio en blancondash Se obvia la segunda parte de la cadena de estructuras

simboacutelicas que contiene NIL

(D1 D2 D3 DN)

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 5: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

55 6969

Historiabull Creado por John McCarthybull Responsable de introducir el teacutermino ldquointeligencia

Artificialrdquo lo hizo en la Conferencia de Dartmouth en 1955bull McCarthy inventoacute el lenguaje de programacioacuten Lisp y

publicoacute su disentildeo en Comunicaciones del ACM en 1960 bull El primer Lisp se desarrolloacute en una IBM-704 y en 1962

aparecioacute la versioacuten 15 bull A mediados de los 60s MIT desarrolloacute MacLisp Xerox -

Interlisp Stanford - UCI Lisp bull En los 70s G Steele y G Sussman - Scheme bull En los 80s - Common Lisp

66 6969

INSTRODUCCION

77 6969

Aspectos Generalesbull Lisp es un lenguaje

ndash orientado a computacioacuten no-numeacuterica ndash lenguaje interactivo

bull La programacioacuten funcional usa definiciones de funciones y llamadas de funciones como las uacutenicas construcciones de programacioacuten

bull Una funcioacuten pura toma ciertos argumentos y regresa un resultado nada mas (no tiene efectos secundarios en el ambiente)

(funcioacuten arg1 arg2 )

88 6969

Aspectos Generalesbull LISP puede usa recursioacuten evita datos y asignaciones

globales pero la IO es difiacutecil

bull Basado en el caacutelculo Lambda (A Church) eg

LISP (LISt Processor)

99 6969

Por queacute Lispbull En LISP los programas y datos usan la misma

estructura lo que permite escribir programas que escriban programas

bull Se pueden desarrollar prototipos raacutepidamente bull Se pueden probar programas y funciones aisladas bull En otros lenguajes las variables tienen un tipo asociado

(no se puede usar una variable sin especificar su tipo)bull En Lisp los valores tienen tipos no las variables

(manifest typing) a diferencia (implicit typing)bull Tiene un garbage collector o recolector de basura y

manejo de memoria automaacutetico

1010 6969

iquestPor queacute Lispbull Se pueden escribir programas que realicen tareas que

no se pueden hacer en otros lenguajes

gt (defun sumaN (n) (lambda(x) (+ x n)))

gt (setf suma3 (sumaN 3))

gt (funcall suma3 4) 7

bull Se ha utilizado en el desarrollo de sistemas complejos EMACS AutoCad MACSYMA etc

FUNCALL llama a una funcioacuten con varias entradas(funcall cons a (b c))

(A B C)

1111 6969

Computacioacuten Simboacutelicabull Las reglas leacutexicas son mucho maacutes simples en LISP

Solo hay pareacutentesis comillas (sencilla doble y backquote) espacios y comas El punto y coma no separa expresiones (no es necesario debido a los pareacutentesis) sino que inicia comentarios

bull LISP permite la manipulacioacuten de siacutembolos y la construccioacuten de estructuras de datos complejas a partior de ellos

gt (append (Carlos Antonio) (Carmen Rosa))(CARLOS ANTONIO CARMEN ROSA)

1212 6969

Computacioacuten Simboacutelicabull La parte extrantildea es el () que sirve para bloquear la

evaluacioacuten de una expresioacuten y devolverla literalmente

gt (Carlos Antonio)1048774 (CARLOS ANTONIO)gt A1048774 Agt 21048774 2

gt AError A is not a bound variable

gt (Luis lsquoMaria)Error Luis is not a function

gt 22

gt (+ 2 2)(+ 2 2)

gt (+ 2 2)4

1313 6969

Computacioacuten Simboacutelicabull Los caacutelculos simboacutelicos y numeacutericos se pueden mezclargt (+ 2 (length (a b c d)))

6

bull LISP no otorga semaacutentica a los siacutembolos que manipulabull LISP contiene un conjunto de funciones predefinidas que

es necesario conocer Como + append length

bull Los siacutembolos en LISP no son casesensitive

bull Muchos signos de puntuacioacuten son autorizados para formar parte de los siacutembolos $lt=gt

1414 6969

EXPRESIONES-S Y ATOMOS

1515 6969

Expresiones-SEstructuras con la que trabaja Lisp y estaacuten formadas porbull Aacutetomosbull Estructuras de la forma (S1 S2) cada celda tiene dos

partes llamadas CAR (S1) y CDR (S2) (1 2) (1 (2 3)) (D1 (D2 (D3 (DN())))

Hay una notacioacuten abreviadandash Los elementos no estaacuten en parejas es decir desaparecen los ( )ndash El punto se sustituye por un espacio en blancondash Se obvia la segunda parte de la cadena de estructuras

simboacutelicas que contiene NIL

(D1 D2 D3 DN)

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 6: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

66 6969

INSTRODUCCION

77 6969

Aspectos Generalesbull Lisp es un lenguaje

ndash orientado a computacioacuten no-numeacuterica ndash lenguaje interactivo

bull La programacioacuten funcional usa definiciones de funciones y llamadas de funciones como las uacutenicas construcciones de programacioacuten

bull Una funcioacuten pura toma ciertos argumentos y regresa un resultado nada mas (no tiene efectos secundarios en el ambiente)

(funcioacuten arg1 arg2 )

88 6969

Aspectos Generalesbull LISP puede usa recursioacuten evita datos y asignaciones

globales pero la IO es difiacutecil

bull Basado en el caacutelculo Lambda (A Church) eg

LISP (LISt Processor)

99 6969

Por queacute Lispbull En LISP los programas y datos usan la misma

estructura lo que permite escribir programas que escriban programas

bull Se pueden desarrollar prototipos raacutepidamente bull Se pueden probar programas y funciones aisladas bull En otros lenguajes las variables tienen un tipo asociado

(no se puede usar una variable sin especificar su tipo)bull En Lisp los valores tienen tipos no las variables

(manifest typing) a diferencia (implicit typing)bull Tiene un garbage collector o recolector de basura y

manejo de memoria automaacutetico

1010 6969

iquestPor queacute Lispbull Se pueden escribir programas que realicen tareas que

no se pueden hacer en otros lenguajes

gt (defun sumaN (n) (lambda(x) (+ x n)))

gt (setf suma3 (sumaN 3))

gt (funcall suma3 4) 7

bull Se ha utilizado en el desarrollo de sistemas complejos EMACS AutoCad MACSYMA etc

FUNCALL llama a una funcioacuten con varias entradas(funcall cons a (b c))

(A B C)

1111 6969

Computacioacuten Simboacutelicabull Las reglas leacutexicas son mucho maacutes simples en LISP

Solo hay pareacutentesis comillas (sencilla doble y backquote) espacios y comas El punto y coma no separa expresiones (no es necesario debido a los pareacutentesis) sino que inicia comentarios

bull LISP permite la manipulacioacuten de siacutembolos y la construccioacuten de estructuras de datos complejas a partior de ellos

gt (append (Carlos Antonio) (Carmen Rosa))(CARLOS ANTONIO CARMEN ROSA)

1212 6969

Computacioacuten Simboacutelicabull La parte extrantildea es el () que sirve para bloquear la

evaluacioacuten de una expresioacuten y devolverla literalmente

gt (Carlos Antonio)1048774 (CARLOS ANTONIO)gt A1048774 Agt 21048774 2

gt AError A is not a bound variable

gt (Luis lsquoMaria)Error Luis is not a function

gt 22

gt (+ 2 2)(+ 2 2)

gt (+ 2 2)4

1313 6969

Computacioacuten Simboacutelicabull Los caacutelculos simboacutelicos y numeacutericos se pueden mezclargt (+ 2 (length (a b c d)))

6

bull LISP no otorga semaacutentica a los siacutembolos que manipulabull LISP contiene un conjunto de funciones predefinidas que

es necesario conocer Como + append length

bull Los siacutembolos en LISP no son casesensitive

bull Muchos signos de puntuacioacuten son autorizados para formar parte de los siacutembolos $lt=gt

1414 6969

EXPRESIONES-S Y ATOMOS

1515 6969

Expresiones-SEstructuras con la que trabaja Lisp y estaacuten formadas porbull Aacutetomosbull Estructuras de la forma (S1 S2) cada celda tiene dos

partes llamadas CAR (S1) y CDR (S2) (1 2) (1 (2 3)) (D1 (D2 (D3 (DN())))

Hay una notacioacuten abreviadandash Los elementos no estaacuten en parejas es decir desaparecen los ( )ndash El punto se sustituye por un espacio en blancondash Se obvia la segunda parte de la cadena de estructuras

simboacutelicas que contiene NIL

(D1 D2 D3 DN)

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 7: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

77 6969

Aspectos Generalesbull Lisp es un lenguaje

ndash orientado a computacioacuten no-numeacuterica ndash lenguaje interactivo

bull La programacioacuten funcional usa definiciones de funciones y llamadas de funciones como las uacutenicas construcciones de programacioacuten

bull Una funcioacuten pura toma ciertos argumentos y regresa un resultado nada mas (no tiene efectos secundarios en el ambiente)

(funcioacuten arg1 arg2 )

88 6969

Aspectos Generalesbull LISP puede usa recursioacuten evita datos y asignaciones

globales pero la IO es difiacutecil

bull Basado en el caacutelculo Lambda (A Church) eg

LISP (LISt Processor)

99 6969

Por queacute Lispbull En LISP los programas y datos usan la misma

estructura lo que permite escribir programas que escriban programas

bull Se pueden desarrollar prototipos raacutepidamente bull Se pueden probar programas y funciones aisladas bull En otros lenguajes las variables tienen un tipo asociado

(no se puede usar una variable sin especificar su tipo)bull En Lisp los valores tienen tipos no las variables

(manifest typing) a diferencia (implicit typing)bull Tiene un garbage collector o recolector de basura y

manejo de memoria automaacutetico

1010 6969

iquestPor queacute Lispbull Se pueden escribir programas que realicen tareas que

no se pueden hacer en otros lenguajes

gt (defun sumaN (n) (lambda(x) (+ x n)))

gt (setf suma3 (sumaN 3))

gt (funcall suma3 4) 7

bull Se ha utilizado en el desarrollo de sistemas complejos EMACS AutoCad MACSYMA etc

FUNCALL llama a una funcioacuten con varias entradas(funcall cons a (b c))

(A B C)

1111 6969

Computacioacuten Simboacutelicabull Las reglas leacutexicas son mucho maacutes simples en LISP

Solo hay pareacutentesis comillas (sencilla doble y backquote) espacios y comas El punto y coma no separa expresiones (no es necesario debido a los pareacutentesis) sino que inicia comentarios

bull LISP permite la manipulacioacuten de siacutembolos y la construccioacuten de estructuras de datos complejas a partior de ellos

gt (append (Carlos Antonio) (Carmen Rosa))(CARLOS ANTONIO CARMEN ROSA)

1212 6969

Computacioacuten Simboacutelicabull La parte extrantildea es el () que sirve para bloquear la

evaluacioacuten de una expresioacuten y devolverla literalmente

gt (Carlos Antonio)1048774 (CARLOS ANTONIO)gt A1048774 Agt 21048774 2

gt AError A is not a bound variable

gt (Luis lsquoMaria)Error Luis is not a function

gt 22

gt (+ 2 2)(+ 2 2)

gt (+ 2 2)4

1313 6969

Computacioacuten Simboacutelicabull Los caacutelculos simboacutelicos y numeacutericos se pueden mezclargt (+ 2 (length (a b c d)))

6

bull LISP no otorga semaacutentica a los siacutembolos que manipulabull LISP contiene un conjunto de funciones predefinidas que

es necesario conocer Como + append length

bull Los siacutembolos en LISP no son casesensitive

bull Muchos signos de puntuacioacuten son autorizados para formar parte de los siacutembolos $lt=gt

1414 6969

EXPRESIONES-S Y ATOMOS

1515 6969

Expresiones-SEstructuras con la que trabaja Lisp y estaacuten formadas porbull Aacutetomosbull Estructuras de la forma (S1 S2) cada celda tiene dos

partes llamadas CAR (S1) y CDR (S2) (1 2) (1 (2 3)) (D1 (D2 (D3 (DN())))

Hay una notacioacuten abreviadandash Los elementos no estaacuten en parejas es decir desaparecen los ( )ndash El punto se sustituye por un espacio en blancondash Se obvia la segunda parte de la cadena de estructuras

simboacutelicas que contiene NIL

(D1 D2 D3 DN)

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 8: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

88 6969

Aspectos Generalesbull LISP puede usa recursioacuten evita datos y asignaciones

globales pero la IO es difiacutecil

bull Basado en el caacutelculo Lambda (A Church) eg

LISP (LISt Processor)

99 6969

Por queacute Lispbull En LISP los programas y datos usan la misma

estructura lo que permite escribir programas que escriban programas

bull Se pueden desarrollar prototipos raacutepidamente bull Se pueden probar programas y funciones aisladas bull En otros lenguajes las variables tienen un tipo asociado

(no se puede usar una variable sin especificar su tipo)bull En Lisp los valores tienen tipos no las variables

(manifest typing) a diferencia (implicit typing)bull Tiene un garbage collector o recolector de basura y

manejo de memoria automaacutetico

1010 6969

iquestPor queacute Lispbull Se pueden escribir programas que realicen tareas que

no se pueden hacer en otros lenguajes

gt (defun sumaN (n) (lambda(x) (+ x n)))

gt (setf suma3 (sumaN 3))

gt (funcall suma3 4) 7

bull Se ha utilizado en el desarrollo de sistemas complejos EMACS AutoCad MACSYMA etc

FUNCALL llama a una funcioacuten con varias entradas(funcall cons a (b c))

(A B C)

1111 6969

Computacioacuten Simboacutelicabull Las reglas leacutexicas son mucho maacutes simples en LISP

Solo hay pareacutentesis comillas (sencilla doble y backquote) espacios y comas El punto y coma no separa expresiones (no es necesario debido a los pareacutentesis) sino que inicia comentarios

bull LISP permite la manipulacioacuten de siacutembolos y la construccioacuten de estructuras de datos complejas a partior de ellos

gt (append (Carlos Antonio) (Carmen Rosa))(CARLOS ANTONIO CARMEN ROSA)

1212 6969

Computacioacuten Simboacutelicabull La parte extrantildea es el () que sirve para bloquear la

evaluacioacuten de una expresioacuten y devolverla literalmente

gt (Carlos Antonio)1048774 (CARLOS ANTONIO)gt A1048774 Agt 21048774 2

gt AError A is not a bound variable

gt (Luis lsquoMaria)Error Luis is not a function

gt 22

gt (+ 2 2)(+ 2 2)

gt (+ 2 2)4

1313 6969

Computacioacuten Simboacutelicabull Los caacutelculos simboacutelicos y numeacutericos se pueden mezclargt (+ 2 (length (a b c d)))

6

bull LISP no otorga semaacutentica a los siacutembolos que manipulabull LISP contiene un conjunto de funciones predefinidas que

es necesario conocer Como + append length

bull Los siacutembolos en LISP no son casesensitive

bull Muchos signos de puntuacioacuten son autorizados para formar parte de los siacutembolos $lt=gt

1414 6969

EXPRESIONES-S Y ATOMOS

1515 6969

Expresiones-SEstructuras con la que trabaja Lisp y estaacuten formadas porbull Aacutetomosbull Estructuras de la forma (S1 S2) cada celda tiene dos

partes llamadas CAR (S1) y CDR (S2) (1 2) (1 (2 3)) (D1 (D2 (D3 (DN())))

Hay una notacioacuten abreviadandash Los elementos no estaacuten en parejas es decir desaparecen los ( )ndash El punto se sustituye por un espacio en blancondash Se obvia la segunda parte de la cadena de estructuras

simboacutelicas que contiene NIL

(D1 D2 D3 DN)

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 9: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

99 6969

Por queacute Lispbull En LISP los programas y datos usan la misma

estructura lo que permite escribir programas que escriban programas

bull Se pueden desarrollar prototipos raacutepidamente bull Se pueden probar programas y funciones aisladas bull En otros lenguajes las variables tienen un tipo asociado

(no se puede usar una variable sin especificar su tipo)bull En Lisp los valores tienen tipos no las variables

(manifest typing) a diferencia (implicit typing)bull Tiene un garbage collector o recolector de basura y

manejo de memoria automaacutetico

1010 6969

iquestPor queacute Lispbull Se pueden escribir programas que realicen tareas que

no se pueden hacer en otros lenguajes

gt (defun sumaN (n) (lambda(x) (+ x n)))

gt (setf suma3 (sumaN 3))

gt (funcall suma3 4) 7

bull Se ha utilizado en el desarrollo de sistemas complejos EMACS AutoCad MACSYMA etc

FUNCALL llama a una funcioacuten con varias entradas(funcall cons a (b c))

(A B C)

1111 6969

Computacioacuten Simboacutelicabull Las reglas leacutexicas son mucho maacutes simples en LISP

Solo hay pareacutentesis comillas (sencilla doble y backquote) espacios y comas El punto y coma no separa expresiones (no es necesario debido a los pareacutentesis) sino que inicia comentarios

bull LISP permite la manipulacioacuten de siacutembolos y la construccioacuten de estructuras de datos complejas a partior de ellos

gt (append (Carlos Antonio) (Carmen Rosa))(CARLOS ANTONIO CARMEN ROSA)

1212 6969

Computacioacuten Simboacutelicabull La parte extrantildea es el () que sirve para bloquear la

evaluacioacuten de una expresioacuten y devolverla literalmente

gt (Carlos Antonio)1048774 (CARLOS ANTONIO)gt A1048774 Agt 21048774 2

gt AError A is not a bound variable

gt (Luis lsquoMaria)Error Luis is not a function

gt 22

gt (+ 2 2)(+ 2 2)

gt (+ 2 2)4

1313 6969

Computacioacuten Simboacutelicabull Los caacutelculos simboacutelicos y numeacutericos se pueden mezclargt (+ 2 (length (a b c d)))

6

bull LISP no otorga semaacutentica a los siacutembolos que manipulabull LISP contiene un conjunto de funciones predefinidas que

es necesario conocer Como + append length

bull Los siacutembolos en LISP no son casesensitive

bull Muchos signos de puntuacioacuten son autorizados para formar parte de los siacutembolos $lt=gt

1414 6969

EXPRESIONES-S Y ATOMOS

1515 6969

Expresiones-SEstructuras con la que trabaja Lisp y estaacuten formadas porbull Aacutetomosbull Estructuras de la forma (S1 S2) cada celda tiene dos

partes llamadas CAR (S1) y CDR (S2) (1 2) (1 (2 3)) (D1 (D2 (D3 (DN())))

Hay una notacioacuten abreviadandash Los elementos no estaacuten en parejas es decir desaparecen los ( )ndash El punto se sustituye por un espacio en blancondash Se obvia la segunda parte de la cadena de estructuras

simboacutelicas que contiene NIL

(D1 D2 D3 DN)

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 10: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

1010 6969

iquestPor queacute Lispbull Se pueden escribir programas que realicen tareas que

no se pueden hacer en otros lenguajes

gt (defun sumaN (n) (lambda(x) (+ x n)))

gt (setf suma3 (sumaN 3))

gt (funcall suma3 4) 7

bull Se ha utilizado en el desarrollo de sistemas complejos EMACS AutoCad MACSYMA etc

FUNCALL llama a una funcioacuten con varias entradas(funcall cons a (b c))

(A B C)

1111 6969

Computacioacuten Simboacutelicabull Las reglas leacutexicas son mucho maacutes simples en LISP

Solo hay pareacutentesis comillas (sencilla doble y backquote) espacios y comas El punto y coma no separa expresiones (no es necesario debido a los pareacutentesis) sino que inicia comentarios

bull LISP permite la manipulacioacuten de siacutembolos y la construccioacuten de estructuras de datos complejas a partior de ellos

gt (append (Carlos Antonio) (Carmen Rosa))(CARLOS ANTONIO CARMEN ROSA)

1212 6969

Computacioacuten Simboacutelicabull La parte extrantildea es el () que sirve para bloquear la

evaluacioacuten de una expresioacuten y devolverla literalmente

gt (Carlos Antonio)1048774 (CARLOS ANTONIO)gt A1048774 Agt 21048774 2

gt AError A is not a bound variable

gt (Luis lsquoMaria)Error Luis is not a function

gt 22

gt (+ 2 2)(+ 2 2)

gt (+ 2 2)4

1313 6969

Computacioacuten Simboacutelicabull Los caacutelculos simboacutelicos y numeacutericos se pueden mezclargt (+ 2 (length (a b c d)))

6

bull LISP no otorga semaacutentica a los siacutembolos que manipulabull LISP contiene un conjunto de funciones predefinidas que

es necesario conocer Como + append length

bull Los siacutembolos en LISP no son casesensitive

bull Muchos signos de puntuacioacuten son autorizados para formar parte de los siacutembolos $lt=gt

1414 6969

EXPRESIONES-S Y ATOMOS

1515 6969

Expresiones-SEstructuras con la que trabaja Lisp y estaacuten formadas porbull Aacutetomosbull Estructuras de la forma (S1 S2) cada celda tiene dos

partes llamadas CAR (S1) y CDR (S2) (1 2) (1 (2 3)) (D1 (D2 (D3 (DN())))

Hay una notacioacuten abreviadandash Los elementos no estaacuten en parejas es decir desaparecen los ( )ndash El punto se sustituye por un espacio en blancondash Se obvia la segunda parte de la cadena de estructuras

simboacutelicas que contiene NIL

(D1 D2 D3 DN)

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 11: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

1111 6969

Computacioacuten Simboacutelicabull Las reglas leacutexicas son mucho maacutes simples en LISP

Solo hay pareacutentesis comillas (sencilla doble y backquote) espacios y comas El punto y coma no separa expresiones (no es necesario debido a los pareacutentesis) sino que inicia comentarios

bull LISP permite la manipulacioacuten de siacutembolos y la construccioacuten de estructuras de datos complejas a partior de ellos

gt (append (Carlos Antonio) (Carmen Rosa))(CARLOS ANTONIO CARMEN ROSA)

1212 6969

Computacioacuten Simboacutelicabull La parte extrantildea es el () que sirve para bloquear la

evaluacioacuten de una expresioacuten y devolverla literalmente

gt (Carlos Antonio)1048774 (CARLOS ANTONIO)gt A1048774 Agt 21048774 2

gt AError A is not a bound variable

gt (Luis lsquoMaria)Error Luis is not a function

gt 22

gt (+ 2 2)(+ 2 2)

gt (+ 2 2)4

1313 6969

Computacioacuten Simboacutelicabull Los caacutelculos simboacutelicos y numeacutericos se pueden mezclargt (+ 2 (length (a b c d)))

6

bull LISP no otorga semaacutentica a los siacutembolos que manipulabull LISP contiene un conjunto de funciones predefinidas que

es necesario conocer Como + append length

bull Los siacutembolos en LISP no son casesensitive

bull Muchos signos de puntuacioacuten son autorizados para formar parte de los siacutembolos $lt=gt

1414 6969

EXPRESIONES-S Y ATOMOS

1515 6969

Expresiones-SEstructuras con la que trabaja Lisp y estaacuten formadas porbull Aacutetomosbull Estructuras de la forma (S1 S2) cada celda tiene dos

partes llamadas CAR (S1) y CDR (S2) (1 2) (1 (2 3)) (D1 (D2 (D3 (DN())))

Hay una notacioacuten abreviadandash Los elementos no estaacuten en parejas es decir desaparecen los ( )ndash El punto se sustituye por un espacio en blancondash Se obvia la segunda parte de la cadena de estructuras

simboacutelicas que contiene NIL

(D1 D2 D3 DN)

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 12: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

1212 6969

Computacioacuten Simboacutelicabull La parte extrantildea es el () que sirve para bloquear la

evaluacioacuten de una expresioacuten y devolverla literalmente

gt (Carlos Antonio)1048774 (CARLOS ANTONIO)gt A1048774 Agt 21048774 2

gt AError A is not a bound variable

gt (Luis lsquoMaria)Error Luis is not a function

gt 22

gt (+ 2 2)(+ 2 2)

gt (+ 2 2)4

1313 6969

Computacioacuten Simboacutelicabull Los caacutelculos simboacutelicos y numeacutericos se pueden mezclargt (+ 2 (length (a b c d)))

6

bull LISP no otorga semaacutentica a los siacutembolos que manipulabull LISP contiene un conjunto de funciones predefinidas que

es necesario conocer Como + append length

bull Los siacutembolos en LISP no son casesensitive

bull Muchos signos de puntuacioacuten son autorizados para formar parte de los siacutembolos $lt=gt

1414 6969

EXPRESIONES-S Y ATOMOS

1515 6969

Expresiones-SEstructuras con la que trabaja Lisp y estaacuten formadas porbull Aacutetomosbull Estructuras de la forma (S1 S2) cada celda tiene dos

partes llamadas CAR (S1) y CDR (S2) (1 2) (1 (2 3)) (D1 (D2 (D3 (DN())))

Hay una notacioacuten abreviadandash Los elementos no estaacuten en parejas es decir desaparecen los ( )ndash El punto se sustituye por un espacio en blancondash Se obvia la segunda parte de la cadena de estructuras

simboacutelicas que contiene NIL

(D1 D2 D3 DN)

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 13: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

1313 6969

Computacioacuten Simboacutelicabull Los caacutelculos simboacutelicos y numeacutericos se pueden mezclargt (+ 2 (length (a b c d)))

6

bull LISP no otorga semaacutentica a los siacutembolos que manipulabull LISP contiene un conjunto de funciones predefinidas que

es necesario conocer Como + append length

bull Los siacutembolos en LISP no son casesensitive

bull Muchos signos de puntuacioacuten son autorizados para formar parte de los siacutembolos $lt=gt

1414 6969

EXPRESIONES-S Y ATOMOS

1515 6969

Expresiones-SEstructuras con la que trabaja Lisp y estaacuten formadas porbull Aacutetomosbull Estructuras de la forma (S1 S2) cada celda tiene dos

partes llamadas CAR (S1) y CDR (S2) (1 2) (1 (2 3)) (D1 (D2 (D3 (DN())))

Hay una notacioacuten abreviadandash Los elementos no estaacuten en parejas es decir desaparecen los ( )ndash El punto se sustituye por un espacio en blancondash Se obvia la segunda parte de la cadena de estructuras

simboacutelicas que contiene NIL

(D1 D2 D3 DN)

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 14: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

1414 6969

EXPRESIONES-S Y ATOMOS

1515 6969

Expresiones-SEstructuras con la que trabaja Lisp y estaacuten formadas porbull Aacutetomosbull Estructuras de la forma (S1 S2) cada celda tiene dos

partes llamadas CAR (S1) y CDR (S2) (1 2) (1 (2 3)) (D1 (D2 (D3 (DN())))

Hay una notacioacuten abreviadandash Los elementos no estaacuten en parejas es decir desaparecen los ( )ndash El punto se sustituye por un espacio en blancondash Se obvia la segunda parte de la cadena de estructuras

simboacutelicas que contiene NIL

(D1 D2 D3 DN)

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 15: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

1515 6969

Expresiones-SEstructuras con la que trabaja Lisp y estaacuten formadas porbull Aacutetomosbull Estructuras de la forma (S1 S2) cada celda tiene dos

partes llamadas CAR (S1) y CDR (S2) (1 2) (1 (2 3)) (D1 (D2 (D3 (DN())))

Hay una notacioacuten abreviadandash Los elementos no estaacuten en parejas es decir desaparecen los ( )ndash El punto se sustituye por un espacio en blancondash Se obvia la segunda parte de la cadena de estructuras

simboacutelicas que contiene NIL

(D1 D2 D3 DN)

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 16: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

1616 6969

Aacutetomosbull En general en Lisp se tiene oacute aacutetomos oacute listas bull Son uno de los posibles componentes de una S-

expressionbull Esta formado por una cadena de caracteres que

comienza con una letra o un diacutegito o un caraacutecter especial distinto de los pareacutentesis ldquo(ldquo ldquo)rdquo

Ejemplos

Asunto CP Pi 31415927

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 17: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

1717 6969

LISTAS

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 18: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

1818 6969

Listasbull Las listas permiten representar una gran cantidad de

cosas Inclusive los programas en Lisp se expresan como listas

bull Las listas tienen una representacioacuten escrita e interna bull La representacioacuten interna son cadenas de celdas cons (a b c) (uno) (esto es 1 lista)

bull Corresponden a una coleccioacuten de expresiones-s encerradas entre pareacutentesis y separadas por uno o maacutes espacios

bull Formalmente una lista es una expresioacuten tal quendash Un aacutetomo nill o () es una listandash Una lista (S1 S2) donde S2 es una listalsquo(1 (2 (3 ))) (1 2 3)

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 19: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

1919 6969

Listasgt (Dos (hombres (y (un (destino nill)))))

(Dos hombre y un destino)

gt (300000 ((masa nill) (velocidad nill) (luz nill)))(300000 ((masa) velocidad) luz)

bull Listas anidadas

((1 uno) (2 dos) (3 tres))

bull Longitud de listas

(1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 20: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

2020 6969

Representacioacuten de Listas

NIL

(setf lista-ejemplo 666)(setf lista-ejemplo (666))

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 21: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

2121 6969

Lista vaciacutea o nulabull Las listas pueden ser Vaciacuteas o No vaciacuteas

Listas vaciacuteasbull S-expresioacuten especial que es a la vez un aacutetomo y una listabull Se representa por NIL o ldquo( )rdquobull Representacioacuten tradicional

bull Para diferenciar las listas de las funciones se empieza la lista con el signo del apoacutestrofe acute

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 22: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

2222 6969

Listas no vaciacuteasbull La maacutes sencilla es la que tiene un uacutenico elementobull Cualquier lista no vaciacutea de n elementos se puede ver

como una estructura en la que se repite n veces la estructura de la lista con un uacutenico elemento

bull La lista elemental de un solo elemento tiene dos tipos de informacioacutenndash El dato correspondiente a esa posicioacuten de la listandash El dato correspondiente al siguiente elemento de la lista

bull Variable lista-ejemplolista-ejemplo que tiene un uacutenico elemento 666

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 23: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

2323 6969

Listasbull Ejemplo de la variable vocales que tiene como valor la

lista LISP (a e i o u)

gt (setf lista (a e i o u))

(A E I O U)

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 24: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

2424 6969

FUNCIONES

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 25: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

2525 6969

NuacutemerosFunciones con nuacutemerosbull Funciones aritmeacuteticas simples suma resta

multiplicacioacuten y divisioacuten

Clases de nuacutemerosbull Enteros nuacutemeros sin decimalesbull Punto flotante siempre se escribe con un punto decimalbull Ratios (fracciones) simplifica automaacuteticamente las

fracciones para usar un denominador los mas pequentildeos posibles

5

611

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 26: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

2626 6969

Orden de las entradasbull Orden de las entradas

ndash La primera entrada de una funcioacuten flecha mas alta de la caja

ndash La segunda entrada la flecha de mas abajo

(82) (28)

8 2

4 14

2 8

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 27: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

2727 6969

Siacutembolosbull Son otra clase de datos en Lispbull Pueden contener cualquier combinacioacuten de letras y

nuacutemeros y algunos caracteres especiales

bull Ejemplos

BANANAS

COMPUTADORbull Siacutembolos especiales T y NIL

ndash T Verdadero Yes ndash NIL Falso No Vaciacuteo

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 28: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

2828 6969

Operaciones(+ n1 n2 nN) retorna la suma n1+n2+hellip+nN Si N = 0 da 0(+) 0(+ 3) 3(+ 3 7 5) 15(+ 32000 32000) ERROR ()(+ 320000 32000) 640000

(- n1 n2 nN) retorna el valor de n1-n2-hellip-nN Si N = 1 da -n1(- 3) -3(- 123 7 5) 111

(ABS n) devuelve el valor absoluto de n(ABS 3) 3(ABS -36) 36

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 29: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

2929 6969

Operaciones( n1 n2) devuelve el valor de dividir n1 por n2( 6 2) 30 ( 5 2) 25

( n) es lo mismo que ( 1 n) es decir devuelve el inverso de n( 2) 05 ( 05) 20

(MOD n1 n2) devuelve el resto de la divisioacuten entera de n1 por n2(MOD 7 2) ---gt 1

(MAX n1 nN) devuelve el mayor valor de n1 nN(MAX 3) 3 (MAX 1 2 3 4 5 2) 5(MAX -23 7 0) 70

(MIN n1 nN) devuelve el menor valor de n1 nN(MIN 3) 3 (MIN 1 2 3 4 5 2) 1(MIN -23 7 0) -23

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 30: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

3030 6969

bull Indicar queacute retorna el LISP para las siguientes expresiones

bull (+ 2 3) bull ( 2 (+ 4 6)) bull (+ 27 767) bull (- 8 6) bull ( 27 65) bull ( 4 5) bull (exp 9) bull (expt 2 4) bull (sqrt 11)

Ejercicios 1

520183469212354581030839275753851633166247903554

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 31: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

3131 6969

Calcular2(4 - 1)6 + (8 - 6)7 18

Solucioacutengt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

gt (+ ( 2 (- 4 1) ( 6 18)) ( (- 8 6) 7))gt 160

Ejercicios 2

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 32: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

3232 6969

Numero de entradas en una funcioacutenbull Muchas funciones aceptan un numero variable de

entradasbull Ejemplo

(+ 4 3 2) (+ (+ 4 3) 2) 9(- 4 3 2) (- (- 4 3) 2) -1( 4 3 2) (( 4 3) 2) 24( 6 3 2) ( ( 6 3) 2) 10(- 4) -4

( 4) 025 (su reciproco)

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 33: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

3333 6969

EVALUACION DE EXPRESIONES

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 34: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

3434 6969

Evaluacioacutenbull La evaluacioacuten de las expresiones S se lleva a cabo

siguiendo el algoritmo de la funcioacuten Eval

IF L is atomic THEN IF L is numeric THEN result is corresponding number ELSE IF L currently has value V THEN result is V ELSE error- unbound variable ELSE IF L is a call of a known function F THEN determine which arguments are to be

evaluated apply EVAL to appropriate arguments apply F to accumulated results ELSE error - undefined function

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 35: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

3535 6969

Funcioacuten especial QUOTEEsta funcioacuten toma un argumento y NO lo evaluacutea

Ejemplo

gt (quote (+ 2 3))gt (+ 2 3)

La funcioacuten quote puede ser sustituida por un el siacutembolo rsquo

gt rsquo(+ 2 3)

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 36: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

3636 6969

Ejercicios 3bull Indique lo que apareceriacutea despueacutes de teclear lo

siguiente

( 8 9)

( 8 9)

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

(+ ( 1 2) (+ 3 4))

17

( 8 9)

9

error

error

(+ ( 1 2) (+ 3 4))

(+ (QUOTE ( 1 2)) (+ 3 4))

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 37: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

3737 6969

PROCESAMIENTO BASICO

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 38: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

3838 6969

Predicados

Las funciones cuyo resultado es un valor booleano

bull atombull numberp symbolpbull listp null endpbull zerop oddp evenp gt ltbull equal not

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 39: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

3939 6969

atombull Identificacioacuten de aacutetomos atom

ndash Identifica todo aquello que no es una lista no vaciacuteandash No sirve para diferenciar una lista vaciacutea nil de algo que no sea

una listandash (atom ltobjetogt)

gt (setf x 123)

gt (atom x)

T

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 40: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

4040 6969

numberp symbolpbull Identificacioacuten de nuacutemeros numberp

ndash Identifica aacutetomos numeacutericos

(numberp ltobjetogt)ndash Ejemplos

(NUMBERP 2) T(NUMBERP lsquoPERRO) NIL

bull Identificacioacuten de siacutembolos symbolpndash Identifica siacutembolos

(symbolp ltobjetogt)ndash Ejemplos

(SYMBOLP 2) NIL(SYMBOLP lsquoPERRO) T

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 41: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

4141 6969

listp null endp

bull Identificacioacuten de listas listpndash Identifica listasndash Sirve para distinguir lo que es nil o una lista no vaciacutea de

cualquier otra cosa

(listp ltobjetogt)

bull Identificacioacuten de listas vaciacuteasndash (null ltobjetogt)ndash (endp ltlistagt)

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 42: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

4242 6969

zerop oddp evenp lt gtbull ZEROP devuelve T si su entrada es 0bull ODDP devuelve T si su entrada es un numero imparbull EVENP devuelve T si su entrada es un numero par

bull lt devuelve T si su primera entrada es menor que la segunda

bull gt devuelve T si su primera entrada es mayor que la segunda

(ZEROP 0) T (ODDP 28) NIL (EVENP 28) T(ZEROP 4) NIL (ODDP 27) T (EVENP 27) NIL(lt 2 3) T(gt 2 3) NIL

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 43: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

4343 6969

equal notbull Predicado EQUAL

ndash Devuelve T si su dos entradas son iguales y NIL en caso contrario

(equal ltobjeto1gt ltobjeto2gt)

bull Predicado NOTndash Realiza la negacioacuten loacutegica de su uacutenico argumento

(not ltargumentogt)

Ejemplos

(NOT T) NIL(NOT NIL) T

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 44: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

4444 6969

Procesamiento Baacutesico de Listasbull FIRST (CAR)- toma una lista como argumento y regresa el primer

elemento

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

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

bull NULL- checa si una lista estaacute vaciacutea

bull LISTP- checa si el argumento es una lista o no

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 45: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

4545 6969

Ejercicios 4bull Escriba una expresioacuten Lisp aplicando first y rests a la

siguiente lista de tal manera que se obtenga el siacutembolo X y el siacutembolo Y

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

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 46: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

4646 6969

Ejercicios 5bull Representa el siguiente aacuterbol mediante una listabull Extrae mediante las funciones FIRST Y REST las

ocurrencias del nuacutemero 6

+

9 6 2

-3 5

6 2

6

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 47: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

4747 6969

Listado de funciones

Asignacioacuten de valores(setf x 2)

(setq x 4)

Construccioacuten 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)

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 48: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

4848 6969

Ejercicio 6bull Construye las listas de los siguientes aacuterboles y luego

ldquoarmardquo 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

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 49: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

4949 6969

FUNCIONES EN LISP

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 50: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

5050 6969

Definicioacuten de Funcionesbull LISP permite definir funciones y asignarles un nombre

defun

bull defun asocia a un siacutembolo (la funcioacuten) un conjunto de sentencias en las cuales se pueden utilizar una serie de paraacutemetros formales declarados al inicio de la funcioacuten

bull Al llamar a la funcioacuten definida con defun se debe proporcionar los valores concretos con los que sustituir esos paraacutemetros formales en la evaluacioacuten de las sentencias del cuerpo de la funcioacuten

bull Tras terminar la evaluacioacuten del cuerpo de la funcioacuten el control del programa vuelve al lugar en donde se realizoacute la llamada

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 51: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

5151 6969

Definicioacuten de funciones en LISP(defun ltfunction-namegt (ltpar-1gt ltpar-ngt)

ltS-expression-1gt

ltS-expression-2gt

ltS-expression-mgt

)

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 52: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

5252 6969

Ejemplo de Funcioacuten

(defun third-element (items)

(first (rest (rest items))))

gt (third-element lsquo(1 2 3 4 5))

3

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 53: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

5353 6969

Condiciones(cond (lttest-1gt ltaction-11gt ltaction-1n1gt)

(lttest-2gt ltaction-21gt ltaction-2n2gt)

(lttest-mgt ltaction-m1gt ltaction-mnmgt)

)

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 54: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

5454 6969

Funciones Loacutegicasbull not toma un argumento y regresa t si es nil o

regresa nil de otra manera

bull and toma cualquier nuacutemero de argumentos y regresa nil si alguno de sus argumentos es nil de otra manera regresa un no-nil

bull or toma cualquier nuacutemero de argumentos y regresa nil si todos sus argumentos son nil de otra manera regresa un no-nil

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 55: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

5555 6969

RECURSION

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 56: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

5656 6969

RecursioacutenAl construir una funcioacuten es posible confiar en esa definicioacuten para usarla como paraacutemetro en la misma funcioacuten

(defun (multiply (x y)

(cond ((= x 0) 0)

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

)

)

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 57: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

5757 6969

Recursioacuten

(defun ismemberof (item list)

(cond ((null list) nil)

((equal item (first list)) t)

(t (ismemberof item (rest list)))

)

)

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 58: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

5858 6969

Funciones Simples de LISP

bull SYMBOLP

bull CONSP

bull ATOM

bull LISTP

bull EQUAL

bull EQL

bull NULL

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 59: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

5959 6969

Funciones Simples de LISPbull ZEROP

bull gt

bull lt

bull FIRST

bull REST

bull CONS

bull LIST

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 60: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

6060 6969

Funciones Simples de LISPbull APPEND

bull REMOVE

bull LAST

bull ARITMETICAS - MAX MIN + 1+ 1-

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 61: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

6161 6969

EJEMPLOS

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 62: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

6262 6969

Ejercicio 7 (LENGTH)bull Implemente la funcioacuten LENGTH usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

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

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

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 63: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

6363 6969

Ejercicio 8 (REMOVE)bull Implemente la funcioacuten REMOVE usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

(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)))) ) ))

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 64: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

6464 6969

Ejercicio 9 (APPEND)bull Implemente la funcioacuten APPEND usando soacutelo las

funciones de manipulacioacuten de listas y aritmeacuteticas

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 65: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

6565 6969

Ejercicio 10 (COUNT-A)bull Construya una funcioacuten llamada COUNT_A que tome un

argumento (que puede ser lista o aacutetomo) y regrese un nuacutemero entero que indique el nuacutemero de elemento atoacutemicos que hay en la estructura

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 66: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

6666 6969

CONCLUSIONES

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 67: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

6767 6969

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 muacuteltiples aplicaciones de IAutilizado en muacuteltiples 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

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 68: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

6868 6969

Bibliografiacutea

bull LISP Winston and HornAddison Wesley

bull The Little LisperDaniel Friedman and Mathias FelleisenSRA

bull Apuntes de LISPGraeme Ritchie

6969 6969

PREGUNTAS

  • Slide 1
Page 69: Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.

6969 6969

PREGUNTAS

  • Slide 1