Académique Documents
Professionnel Documents
Culture Documents
LISP
2 /51
Tabla de Contenido
Objetivos Historia. Introduccin Expresiones-S tomos y Listas Funciones en LISP Conclusiones Bibliografa
3 /51
Objetivos
Exponer los conceptos bsicos del LISP. Presentar las expresiones-s, los tomos y las listas. Presentar las funciones bsicas del LISP. Crear nuevas funciones en LISP.
4 /51
HISTORIA
5 /51
Historia
Creado por John McCarthy Responsable de introducir el trmino inteligencia Artificial, lo hizo en la Conferencia de Dartmouth en 1955 McCarthy invent el lenguaje de programacin Lisp y public su diseo en Comunicaciones del ACM en 1960 El primer Lisp se desarroll en una IBM-704, y en 1962 apareci la versin 1.5. A mediados de los 60's, MIT desarroll MacLisp, Xerox Interlisp, Stanford - UCI Lisp. En los 70's, G. Steele y G. Sussman - Scheme. En los 80's - Common Lisp.
6 /51
INTRODUCCIN
7 /51
Aspectos Generales
LISP es un lenguaje:
orientado a computacin no-numrica lenguaje interactivo, recursivo No visual LISP (LISt Processor)
La programacin funcional usa definiciones de funciones y llamadas de funciones como las nicas construcciones de programacin. Basado en la notacin prefija (o clculo Lambda).
Ejercicio 1
Convierta en notacin prefija las siguientes expresiones
1. (3x + xy - x/y)
2. (3x3 + x2 + 5x -5) 3. (3/x + x2y - x/y)*xy
9 /51
Ejercicio 2
Convierta a notacin prefija las siguientes expresiones:
1. (2+3-4)/(4*4+5)
2. (2*34 - 3(3*5 - 1)+4/3)/(2*4(3-4+5*6)+3) 3. (3 4 6 - 4*5)/((2 + 3/4)*(3*5/2 + 1)/(2 + 4 + 3)) 4. (2*3 4 + (5*6)/(4 - 6) - 3*55/(3 + 4 - 5*7))/(4+2)
10 /51
Por qu Lisp?
En LISP los programas y datos usan la misma estructura, lo que permite escribir programas que escriban programas. Se pueden desarrollar prototipos rpidamente. Se pueden probar programas y funciones aisladas.
En otros lenguajes las variables tienen un tipo asociado (no se puede usar una variable sin especificar su tipo). En LISP los valores tienen tipos no las variables (manifest typing) a diferencia de los lenguajes convencionales (implicit typing).
Por qu Lisp?
Se pueden escribir programas que realicen tareas que no se pueden hacer en otros lenguajes,
> (defun sumaN (n) #'(lambda(x) (+ x n))) > (setf suma3 (sumaN 3)) > (funcall suma3 4) > 7
Se crea una funcin Se asigna a una variable Se llamar a la variable
Computacin Simblica
Las reglas lxicas son mucho ms simples en LISP. 1. Solo existen parntesis, comillas (sencilla y doble), espacios y comas. 2. El punto y coma no separa expresiones (no es necesario debido a los parntesis) sino que inicia comentarios.
LISP no otorga semntica a los smbolos que manipula. Los smbolos en LISP no son case-sensitive. Muchos signos de puntuacin son autorizados para formar parte de los smbolos: '?!$/<=>*'
13 /51
Computacin Simblica
La parte extraa es el ('), que sirve para bloquear la evaluacin de una expresin y devolverla literalmente. Se dice que todo lo que est a continuacin de la se entrega literalmente, no se evala. > '(Carlos Antonio)
CARLOS ANTONIO > 'A A > '2 2 > A Error: A is not a bound variable > (Luis Maria) Error: Luis is not a function
14 /51
Ejercicio 3
Diga que entrega el LISP cuando se le entrega las siguientes expresiones?: 123 1233 ABC ABC (123) (ABC) (ABC) (+ 12 3) (+ 12 3)
15 /51
Ejercicio 3
Diga que entrega el LISP cuando se le entrega las siguientes expresiones?: 123 1233 ABC ABC (123) (ABC) (ABC) (+ 12 3) (+ 12 3) 123 1233 the variable ABC is unbound ABC (123) Undefind function ABC called (ABC) 15 (+ 12 3)
16 /51
17 /51
Smbolos
Pueden contener cualquier combinacin de letras y nmeros, y algunos caracteres especiales.
Ejemplos: BANANAS COMPUTADOR
18 /51
Expresiones-S
Son estructuras del LISP y estn formadas por: 1. tomos. Son elementos que no contienen parntesis. Corresponde a smbolos 53 puca 2. Listas. Es un conjunto de tomos o de otras listas agrupadas dentro de parntesis. Una lista tiene cabeza CAR y cola CDR (D1 D2 D3 D4 D5 . . . DN)
CAR CDR
19 /51
Listas
Corresponden a una coleccin de expresiones-s encerradas entre parntesis y separadas por espacios.
Las listas permiten representar una gran cantidad de cosas. Los programas en Lisp se expresan como listas. Las listas tienen una representacin escrita e interna. nil, es una lista vaca. (), es una lista vaca. nil es equivalente a () nil no es nulo (null)
> (atom nil) T
Ejemplos de Listas
> > > > (1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d) ((1 uno) (2 dos) (3 tres))
> (1 .(2)) (1 2)
> (1 .(2 .(()))) (1 2 nil) > (Dos .(hombres .(y .(un .(destino . nil))))) (Dos mujeres y un destino) > (300000 .((masa . nil) .(velocidad . nil) .(luz . nil))) (300000 ((masa) velocidad) luz)
21 /51
Ejercicio 4
Disee una lista para representar:
Recuerde que el lisp no administra la semntica. La lista diseada debe ser entendible por computador y fcil de ser procesado. Los tipos de datos son implcitos. 5 6 7 4 1 3 8 2
1. 2. 3. 4. 5. 6.
Los das de la semana. El calendario (slo para un mes). La disposicin de ficha en un puzzle. La disposicin del juego de michi Un laberinto Las notas obtenidas por los alumnos del curso.
22 /51
Evaluacin
La evaluacin de las expresiones S se lleva a cabo siguiendo el algoritmo de la funcin 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
23 /51
Evaluacin
Toda expresin-S si se coloca en la lnea de comandos intentar evaluarse. Si la expresin se inicia con una se devuelve lo que se encuentra a continuacin.
Ejemplo:
> (quote (+ 2 3)) > (+ 2 3) La funcin quote puede ser sustituida por un el smbolo > (+ 2 3)
25 /51
Ejercicios 5
Indique lo que aparecera despus 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))
26 /51
27 /51
Operaciones matemticas
(- number [number ...]) (* number [number ...]) (/ number [number ...]) (+ number number ...) (1- number) (1+ number) (abs number) (atan num1 [num2]) (ceiling number) (cos angle) (exp number) (expt base power) (float number)
Resta Producto Divisin Suma cremento en 1 incremento en 1 valor absoluto arco tangente Mayor entero coseno exponencial Potencia. Convierte real
Menor entero Mximo comn divisor Mnimo comn mltiplo Logaritmo natural
(logand integer integer ...) AND de bits, ret entero (logior integer ...) (max number number ...) (min number number ...) (rem num1 num2 ...) (round number) (sin angle) (sqrt number) (truncate number)
OR de bits, ret entero mximo mnimo comn mltiplo Resto de num1/num2 Rodendeo Seno en radianes Raz cuadrada Trunca, sin signo 28 /51
2) 2) 2) 2)
29 /51
Operaciones matemticas
(+ n1 n2 ... nN) retorna la suma n1+n2++nN. Si N = 0, da 0. (+) 0 (+ 3) 3 (+ 3 7 5) 15 (+ 32000 32000) ERROR (*) (+ 32000.0 32000) 64000.0
(- n1 n2 ... nN) retorna el valor de n1-n2-.-nN. Si N = 1, da -n1 (- 3) -3 (- 123 7 5) 111 (/ n1 n2) devuelve el valor de dividir n1 por n2. (/ 6 2) 3.0 (/ 5 2) 2.5 (/ n) es lo mismo que (/ 1 n); es decir, devuelve el inverso de n. (/ 2) 0.5 (/ 0.5) 2.0
30 /51
Operaciones matemticas
(ABS n) devuelve el valor absoluto de n. (ABS 3) 3 (ABS -3.6) 3.6
(MOD n1 n2) devuelve el resto de la divisin entera de n1 por n2. (MOD 7 2) ---> 1 (MAX n1 ... nN) devuelve el mayor valor de n1,..., nN. (MAX 3) 3 (MAX 1 2 3 4 5 2) 5 (MAX -2.3 7 0) 7.0 (MIN n1 ... nN) devuelve el menor valor de n1,..., nN. (MIN 3) 3 (MIN 1 2 3 4 5 2) 1 (MIN -2.3 7 0) -2.3
31 /51
Ejercicio 6
Indicar qu retorna el LISP para las siguientes expresiones:
1. 2. 3. 4. 5. 6. 7. 8. 9. (+ 2 3) (* 2 (+ 4 6)) (+ 2/7 7/67) (- 8 6) (* 2/7 6/5) (/ 4 5) (exp 9) (expt 2 4) (sqrt 11)
32 /51
Ejercicio 7
Calcular
33 /51
Constantes
> pi 3.141592653589793 > (exp 1) 2.718282
34 /51
Predicados
Son aquellas funciones cuyo resultado es un valor booleano
atom numberp, symbolp listp, null, endp zerop, oddp, evenp, >, < equal, not
35 /51
Predicados
(/= atom atom .....) (< atom atom .....) (<= atom atom .....) (= atom atom .....) (> atom atom .....) (>= atom atom .....) (or expression .....) (and expression .....) (not item) (boole func int1 int2 ...) (eq exp1 exp2) (equal exp1 exp2)
Desigualdad Menor Menor o igual Igualdad Mayor Mayor o igual or (nil si todos nil) and (T si todos T) Es nil funcin booleana igualdad (idnticos) igualdad (estructural) 36 /51
(atom item) (listp list) (boundp atom) (null item) (endp list)
Es un tomo Es lista Est inicializado Est inicializado en nil Lista vaca Es par Es impar Es real o entero Es smbolo Es cero T si es negativo
(evenp number)
(oddp number) (numberp item) (symbolp symbol)
(zerop number)
(minusp item)
atom
Identificacin de tomos: atom Identifica todo aquello que no es una lista no vaca No sirve para diferenciar una lista vaca nil de algo que no sea una lista. (atom <objeto>)
> (setf x '123) > (atom x) T
37 /51
38 /51
numberp, symbolp
Identificacin de nmeros: numberp
Identifica tomos numricos, Ejemplos: (numberp 2) (numberp PERRO) (numberp perro) T nil nil (numberp <objeto>)
(symbolp <objeto>)
40 /51
'(1 2)
() '() nil 'a '1 1 a
nil
T T T T T T is unbound
nil
T T T nil nil nil is unbound
T
T T T nil nil nil is unbound
nil
T T T is not LIST is not LIST is not LIST is unbound
41 /51
Ejercicio 8
Diga qu retorna el LISP en los siguientes casos:
1. (and (atom 'a) (atom '()) (atom (+ 2 3)))
2. (and (oddp 3) (evenp 2) (minusp -3) (zerop 0.0))
3. (and (> -3.0 (truncate -3.1))(= -3.0 (round -3.1)) (> -3.0 (ceiling -3.1))(= 4 (floor 4.31)))
4. (and (listp '()) (atom '()) (symbolp 'a) (listp '('1)) (atom 'abc)) 5. (and (symbolp 'anr) (symbolp "anr") (symbolp '()))
42 /51
Ejercicio 9
Diga qu retorna el LISP en los siguientes casos:
1. (and (atom 'hola) (null 'hola) (listp '() ) (andp '() ))
2. (and (atom (+ 3 4)) (atom '(+ 3 4)) (listp (* 3 4)) (listp '(* 3 4))) 3. (and (listp '("(2 3)")) (listp '(nil)) (listp ()))
43 /51
not
Predicado NOT Realiza la negacin lgica de su nico argumento (not <argumento>)
Ejemplos: (NOT T) NIL (NOT NIL) T
44 /51
igualdad
=
eq eql
equal compara objetos, devuelve T si su dos entradas son iguales, y NIL en caso contrario (equal <objeto1> <objeto2>) equalp compara objetos, es ms flexible que equal.
45 /51
igualdad
nmeros a1 a2 = eq tomos eql objetos equal objetos G equalp
'(1 2)
'(1 2) '(A A) 1
'(1.0 2.0)
'(1 2) '(a a) 1.0
error type
error type error type T
nil
nil nil nil
nil
nil nil nil
nil
T T nil
T
T T T
'1
'1.1 (+ 2 3) (+ 2 3)
1
1.1 5.0 '5
T
T T T
T
nil nil T
T
T nil T
T
T nil T
T
T T T
(+ 2 3)
'A "abc" "ABC"
5
'a 'abc "abc"
T
error type error type error type
T
T nil nil
T
T nil nil
T
T nil nil
T
T nil T
46 /51
Ejercicio 10
Diga qu retorna el LISP en los siguientes casos:
(= (+2 3 4) 9) (eq 1234 1234) (eq 1234 1234) (eq (12 12) (12 12)) (eql (12 12) (12 12)) (equal (12 12) (12 12)) (equal (12.1 12) (12 12.1))
47 /51
CONCLUSIONES
48 /51
Conclusiones
LISP es un lenguaje de alto nivel de tipo funcional que es utilizado en mltiples aplicaciones de IA LISP se basa en manejo de listas y tiene desde funciones simples hasta estructuras de datos
49 /51
Bibliografa
LISP Winston and Horn Addison Wesley The Little Lisper Daniel Friedman and Mathias Felleisen SRA Apuntes de LISP Graeme Ritchie
50 /51
PREGUNTAS
51 /51