Mg. Samuel Oporto Díaz Lima, 14 de mayo 2005 LISP INTELIGENCIA ARTIFICIAL.
-
Upload
emiliana-nicodemus -
Category
Documents
-
view
3 -
download
1
Transcript of 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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
6969 6969
PREGUNTAS
- Slide 1
-