Title: Programacin funcional
1Programación funcional
2Contenido
- Listas y estructuras complejas
- Áreas de aplicación y comparación con otros
lenguajes funcionales
3Listas y estructuras complejas
- Las listas pueden ser de dos tipos
- Vacías, es decir, el átomo NIL o ().
- No vacías.
4Listas y estructuras complejas
- Par punteado o puntos pareja
- Una celda cons es una estructura de registro que
contiene dos componentes llamados car y cdr - Como un caso especial, un par punteado es una
única celda cons y se representa mediante el car
y el cdr encerrado entre paréntesis y separados
por un punto rodeado por dos espacios en blanco
( . ) - Para crear un par punteado
- gt (setq L (cons a b))
- (A . B)
5Listas y estructuras complejas
Listas como árboles
A veces se utiliza el término árbol para
referirse a algunos CONS y todos los demás CONSES
accesibles a él de manera transitiva a través de
enlaces de CAR y CDR hasta alcanzar objetos
NO-CONS éstos NO-CONSES son conocidos como las
hojas del árbol.
6Listas y estructuras complejas
- Listas como pilas
- Operaciones sobre pilas
- pop
- push
- pushnew
7Listas y estructuras complejas
Funciones generales sobre Listas
- Construcción de listas
- LIST ( list lt elemento1 gt ... lt elemento ngt )
- MAKE-LIST ( make-list lt tamaño gt lt elemento
inicial gt ) - APPEND ( append lt lista1 gt ... lt lista n gt )
- CONS ( cons lt elemento gt lt lista gt )
- Acceso a listas
- CAR ( car lt lista gt )
- CDR ( cdr lt lista gt )
- Remover elementos
- REMOVE ( remove lt elemento gt lt lista gt )
- REMOVE-DUPLICATES ( remove-duplicates lt lista gt )
- Extracción de información
- FIND ( find lt elemento gt lt lista gt )
8Listas y estructuras complejas
- Listas como conjuntos
- La diferencia entre un conjunto y una lista es
La no repetición de elementos en los conjuntos. - Las operaciones más habituales de conjuntos
- member
- union
- intersection
- set-difference
- subsetp
9Listas y estructuras complejas
- Listas como tablas o a-list
- Es una lista compuestas por pares de elementos
(asociados) - El car de una a-list se llama clave y el cdr se
conoce como dato (clave . dato) - Las operaciones más habituales sobre a-list son
- assoc
- acons
- rassoc
10Listas y estructuras complejas
Estructuras
- (defstruct persona
- (sexo nil)
- (personalidad agradable))
- (setf oc1-persona (make-persona))
- (setf oc2-persona (make-persona sexo femenino))
- (persona-sexo oc2-persona)
- (setf (persona-sexo oc1-persona) femenino)
- (persona-p oc1-persona)
11Listas y estructuras complejas
Estructuras
- Una estructura puede incluir campos de otra
- (defstruct empleado
- (pago salario))
- (defstruct (programador ( include empleado))
- (lenguaje-preferido lisp))
12Listas y estructuras complejas
Estructuras
- Las estructuras son componentes importantes de
grandes sistemas. - Ventajas de las estructuras sobre las a-list
- Los procedimientos de acceso para ocurrencias son
eficientes. - Los campos de una estructura se definen de una
vez y para siempre.
13Listas y estructuras complejas
Clases y funciones genéricas
- Qué hacer depende de lo que se haga.
- (defstruct triangulo
- (base 0)
- (altura 0))
- (defstruct rectangulo
- (ancho 0)
- (alto 0))
- (defstruct circulo
- (radio 0))
-
14Listas y estructuras complejas
Clases y funciones genéricas
- Métodos y funciones genéricas
- Los métodos son procedimientos a partir de
funciones genéricas por parte del tipo de
argumentos. Se definen igual que las funciones
con dos excepciones - Se usa DEFMETHOD en lugar de DEFUN.
- La lista de parámetros se generaliza.
- Las funciones genéricas son una colección de
métodos que comparten el mismo nombre.
15Listas y estructuras complejas
Clases y funciones genéricas
- Ejemplo
- (defmethod area ((figura triangulo))
- ( ½
- (triangulo-base figura)
- (triangulo-altura figura)))
- (defmethod area ((figura rectangulo))
- ( (rectangulo-ancho figura)
- (rectangulo-altura figura)))
- (defmethod area ((figura circulo))
- ( pi (expt (circulo-radio figura) 2)))
16Listas y estructuras complejas
Clases y funciones genéricas
- Las clases se parecen a las estructuras pero
tienen diferencias importantes - Las clases están pensadas para vincularse con
funciones genéricas. - Se tienen múltiples ligas de herencia.
- Se debe ser más específico acerca de lo que
deseamos DEFSTRUCT supone mucho, DEFCLASS supone
poco.
17Listas y estructuras complejas
Clases y funciones genéricas
- Plantilla básica de defclass
- (defclass ltnombre de la clasegt ltlista de
superclases directasgt - ((ltnombre de la ranura 1gt accessor
ltprocedimiento de acceso 1gt - initform ltforma par el valor inicial
1gt - initarg ltsímbolo para marcar
argumento 1) -
- ((ltnombre de la ranura ngt accessor
ltprocedimiento de acceso ngt - initform ltforma par el valor inicial
ngt - initarg ltsímbolo para marcar
argumento n)
18Listas y estructuras complejas
Clases y funciones genéricas
- Ejemplo de clases
- (defclass articulo()
- ((titulo accessor articulo-titulo initarg
titulo) - (autor accesor articulo-autor initarg
autor))) - (defclass articulo-de-computacion (articulo) ())
- (defclass articulo-de-politica (articulo) ())
- (defclass amigo()
- ((nombre accessor nombre-de-amigo initarg
amigo))) - (defclass amigo-programador (amigo) ())
- (defclass amigo-filosofo (amigo) ())
19Listas y estructuras complejas
Clases y funciones genéricas
- Las clases permiten heredar métodos
- (defmethod proceso ((amigo amigo-programador)
- (articulo articulo-de-computacion))
- (imprime-notificacion articulo amigo))
- (defmethod proceso ((amigo amigo-filosofo)
- (articulo articulo))
- (imprime-notificacion articulo amigo))
- (proceso articulo amigo)
20Listas y estructuras complejas
Clases y funciones genéricas
- Otras características de los métodos
- Métodos más específicos tienen prioridad sobre
otros - El orden de los parámetros ayuda a determinar la
prioridad del método - Los métodos pueden especializarse a ocurrencias
individuales.
21Áreas de aplicación y comparación con otros
lenguajes funcionales
Las áreas de aplicación son
- Principalmente la Inteligencia artificial.
- Computación numérica y simbólica.
- Diseño asistido por computadora
22Áreas de aplicación y comparación con
Dentro del área de la IA
- Procesamiento del lenguaje natural
- Percepción y reconocimiento de patrones
- Otras aplicaciones de la IA como
- Juegos
- Programación inteligente y programación
automática - Sistemas expertos
- Sistemas de planificación
- Redes Neuronales
- Algoritmos genéticos
- Robótica
23Áreas de aplicación y comparación con
Comparación con otros lenguajes funcionales Otros
lenguajes funcionales
24Áreas de aplicación y comparación con
Comparación con otros lenguajes funcionales
La suma de 1 hasta 10
En Scheme (define sum (lambda (from total)
(if (0 from) total (sum
(- from)( total from))))) (sum 10 0)
En C total 0 For (i 1 i lt10
i) total1
En Haskell sum 1..10
En SML let fun sum i tot if i 0 then tot
else sum (i-1) (toti) in sum 10 0 end