Vous êtes sur la page 1sur 55

PARADIGMA DE LENGUAJE

FUNCIONAL

Paradigmas de Lenguajes
3er Ao LCC- Facultad CEFyN - UNSJ -
INTRODUCCIN

Propuesto por John MC Carthy en1960


LISP es un lenguaje funcional, por lo tanto se basa en
definicin de funciones y llamadas a funciones.
Es un lenguaje fundamentado en la teora formal de
Funciones Matemticas, basado en la evaluacin de
funciones y cuyo objetivo NO es la realizacin de
clculos matemticos con doble precisin.
Fue diseado originalmente para la manipulacin de
frmulas simblicas, ms adelante surge como un
lenguaje importante en la comunidad de Inteligencia
Artificial
INTRODUCCIN
La esencia de la programacin funcional es el uso de funciones para crear
programas, junto con las operaciones bsicas de composicin y recursin ;
pero a ello hay que aadir una propiedad fundamental, la transparencia
referencial

Transparencia referencial: el valor de una funcin depende nicamente de


los valores de sus argumentos, las variables no pueden representar valores
diferentes y una vez que a una variable se le asigna un valor, este no puede
cambiar.
Los lenguajes funcionales con esta propiedad se llaman aplicativos puros,
es una diferencia fundamental con los llamados lenguajes imperativos ya que la
ausencia de variables mutables prohbe los efectos laterales.

El cmputo de una funcin puede realizarse por reescritura o reduccin:


sustitucin de llamadas a funciones (segn su definicin) por los argumentos.
Por razones de eficiencia algunos lenguajes (p.e. LisP) incluyen ciertas
caractersticas imperativas, como las variables mutables.(Dejan de ser Puros)
Componentes de un Sistema de
Programacin Funcional

SPF< O, F, operacin, F , D>


O: Conjunto de objetos
F: Conjunto de funciones F: OO ( reciben objetos como
argumentos y proyectan objetos)
x, y O y f F; f: x y
Operacin: existe una nica operacin que es la aplicacin.
x O y f F; f: x f(x)
F: Conjunto de funciones de orden superior o Formas
Funcionales F : FF ( reciben funciones como argumentos y
proyectan funciones)
f F / x O y f F; f : f U O f ; fog: x f:(g:x)
D: es un Mtodo para definir funciones propias del usuario
OBJETOS

No se realiza la definicin de tipo. Cada dato objeto lleva un descriptor en


tiempo de ejecucin que muestra su tipo y otros atributos
Atomos pueden ser nmeros( punto fijo o punto flotante) y smbolos
(Conjunto de caracteres que empiezan con letra o numero)
Predefinidos: Tverdad; NIL falso
Listas estructura ms importante de Lisp
(A B C); ( F ( G E)); () NIL (NIL es tomo y lista)

La unidad bsica de construccin de una lista es:

Clula CDR (cola de la lista)


elemental
Tiene dos punteros
CAR (cabeza de la lista)
OBJETOS ( continuacin)

La lista (A) se representa: NIL


A
La lista vacia: NIL
NIL
La lista (A B) NIL
A B
La lista (A (B C)) NIL
A NIL
B C
La lista (A B A )
NIL
A B
OBJETOS (continuacin)

Par punteado (A.B) B


A
Matrices matemticas
Estructuras: Construcciones definidas por el
usuario
Cadena de caracteres que se escriben entre
comillas dobles
OBJETOS (final)

Todas estas estructuras se organizan en grupos


jerrquicos llamados s-expresiones.
Las clases ms importantes son tomos y objetos celulares
Caractersticas

LISP Hace uso siempre de una seccin de memoria dinmica,


es decir la memoria se organiza durante la ejecucin. La nica
esttica es el Sist. de Trabajo. Ej: Intrprete, E/S, Recolector
de basura. Por consiguiente un programa puede modificar la
forma de los datos (tipo).
Todos los datos quedan representados por una misma forma,
llamada expresin simblica s-expresin. El programa en
s, queda representado por la forma s-expresin: "es la
unidad bsica de un programa en LISP"
Se destaca la equivalencia de formas entre los programas y los
datos del lenguaje.
Otra caracterstica es la confiabilidad de la recursin como
estructura de control en vez de iteracin (ciclos).
Componentes de un Sistema de
Programacin Funcional

SPF< O, F, operacin, F , D>


O: Conjunto de objetos
F: Conjunto de funciones F: OO ( reciben objetos como
argumentos y proyectan objetos)
x, y O y f F; f: x y
Operacin: existe una nica operacin que es la aplicacin.
x O y f F; f: x f(x) / x es el parmetro que se fija en tiempo
de aplicacin. La aplicacin de f, genera otro valor.
F: Conjunto de funciones de orden superior o Formas
Funcionales F : FF ( reciben funciones como argumentos y
proyectan funciones)
f F / x O y f F; f : f U O f ; fog: x f:(g:x)

D: es un Mtodo para definir funciones propias del usuario


FUNCIONES PREDEFINIDAS

Son los principales procedimientos que permiten


manipular los datos. Existen funciones
matemticas y funciones para listas
Las funciones se pueden clasificar en:
Funciones Aritmticas (tomos).
Formas Especiales (tomos y listas)
Funciones Bsicas: LENGHT, REVERSE, SUBST (listas)
Analizadores, Constructores: permiten trabajar con lista.
Predicados: (tomos y listas)
Ligadura - Asignacin - Evaluacin

Ligadura : es el proceso de reservar un lugar en la memoria


con el fin de almacenar un valor para un smbolo .
Asignacin: es el proceso de almacenar un valor o asociar un
valor a la variable.
El proceso de recuperar un valor de ese lugar es un tipo de
evaluacin.
Efecto secundario: A todo aquello que un procedimiento ha
realizado y que persiste an de devolver un valor se llama efecto
secundario. Los efectos secundarios son resultados implcitos.
Las reglas de evaluacin son las siguientes:
El tomo numrico da el mismo como resultado.
El tomo literal es considerado como una variable (es decir, la variable en LISP en
un smbolo) y da el valor ms reciente asignado.
Si la lista es vaca (), entonces evala NIL.
La lista que sea diferente de NIL es considerada como una llamada a una funcin;
donde el primer elemento de la lista representa la funcin y los otros representan
los argumentos.
La Sintaxis de LISP

La evaluacin/aplicacin de funciones usa la


notacin completa:
polaca de cambridge con parntesis (como las
estructuras de listas), con el nombre de la funcin
seguida de los argumentos
Programas y datos comparten la misma sintaxis.
FUNCIONES MATEMTICAS

(+ ) 0 ; (+ 5 7 2)14; (- 3.14 2.71) .43 ;


(- 10 2 5) 3 asociatividad en la resta de izq. a derecha.
(EXPT 2 3) 8 Potencia
(MOD 5 2) 3
(MAX 2 4 3) 4
(MIN 2 4 1) 1

(1+ 6) 7 corresponde a Add1


(1- 6) 5 corresponde a Sub1
(SQRT 4.0) 2.0
(MINUS 8) -8
(MINUS -8) 8
(ABS 5) 5
(ABS -5) 5
Evaluacin y representacin de expresiones

Expresin en matemtica Expresin en Lisp


(8 + ((7+3)/10) ) (+8 (/ (+7 3) 10))

Evaluacin es uniforme, la operacin decide si se


evalan los operandos.
Representacin, es en forma del rbol, la evaluacin
sigue este orden en el tiempo de ejecucin
+
8 /
FORMAS ESPECIALES

Quote: Inhibe la evaluation del argumento


(QUOTE (A B C)) (A B C)
Son iguales
o bien: '(A B C) (A B C)
Setq: Operador de asignacin (SET)
Si queremos L (A B) entonces: (SETQ L '(A B)) (A B)
Eval: Se dispara automticamente cuando se escribe
una funcin .Pero tambin podemos usar la funcin
EVAL en forma explcita.
(SETQ A 'B) B ; (SETQ B 'C) C; A B ; (EVAL A)C
FUNCIONES BSICAS

LENGTH: Entrega la cantidad de elementos de una lista.


Ej (LENGTH '((A B) (C D)))2
REVERSE: rota o gira una lista.
Ej (REVERSE '((A B) (C D E)))((C D E) (A B))
SUBST: toma tres argumentos, y reemplaza el segundo
por el primero en el tercer argumento o expresin :
(SUBST <nueva s-exp.> <vieja s-exp.> <s-exp. de trabajo>)
Ej (SUBST 'A 'B '(A B C))(A A C)
FUNCIONES SOBRE LISTAS

CAR y FIRST: Son equivalentes. Retornan el primer elemento de la lista .


Ej (CAR '((A B) C))(A B); (CAR (CAR '((A B) C))) A
CDR y REST: Son equivalentes. Retornan la lista excepto el primer
elemento. (El resultado es lista).
Ej (CDR '((A B) C))(C)

NOTA: podemos abreviar los anidamiento de CAR y CDR usando funciones que los
combinan, ej (CAR (CDR '(A B C))) (CADR '(A B C))

LAST: Retorna una lista formada con el ltimo elemento de la lista que
recibe como argumento. Si LAST se aplica sobre tomos retorna el tomo.
Ej (LAST '(A B C))(C) ; (LAST 5)5
NTH: Extrae el elemento situado en la posicin NRO de la lista.
(NTH <nro> <lista>) NTH toma el cero como base.
Ordinales : SECOND, THIRD , , TENTH Devuelven el correspondiente
elemento de la lista
CONSTRUCTORES DE LISTAS

APPEND: Une o enlaza todos sus argumentos, que


deben ser listas, entregando una sola lista (N arg)
Ej (APPEND '(A B) '(C))(A B C)
LIST: Construye una lista utilizando como elementos
los resultados de evaluar sus argumentos. (N arg)
Ej (SETQ L '(A B))(A B)
(LIST L L) ((A B) (A B))
CONS: entrega una lista donde el primer elemento es
la cabeza del segundo, el cual debe ser lista, de lo
contrario entrega un par punteado.
ej (CONS ( A B) (C)) . ((A B) C)
(CONS uno dos) (uno.dos)
COMPARACION ENTRE LOS
CONSTRUCTORES

(APPEND '(A B) '(C D)) (A B C D)

(LIST '(A B) '(C D)) ((A B) (C D))

(CONS '(A B) '(C D))((A B) C D)


PREDICADOS (entregan T o Nil)

LISTP y ATOM: Son complementarios.


LISTP es cierto si su argumento es una lista y falso en cualquier
otro caso.
ATOM es cierto si su argumento es un tomo y falso en
cualquier otro caso.
NULL y ENDP: ambos detectan la lista vaca o el final de
una lista (ya que NIL es el final de una lista). NULL es
ms general, puesto que ENDP solo puede trabajar
sobre listas.
NULL verifica que su argumento sea una lista vaca.
ENDP verifica que lista est vaca.
ZEROP: Espera un tomo numrico y testea si ste
argumento es cero. EJ (SETQ ZERO 0) 0 ; (ZEROP ZERO) T
PREDICADOS RELACIONALES

EQUAL: Toma dos argumentos. Y considera que estos


son iguales si tienen la misma estructura y forma
EQ : Solo verifica apuntadores
DIFERENCIAS ENTRE EQ Y EQUAL
(setq l1 (list a b c)) (A B C)
(setq l2 (list a b c))(A B C)
(setq l3 l2)(A B C)

(equal L1 L2) T ; (equal L2 L3) T


(eq L1 L2) NIL ; (eq L2 L3) T
PREDICADOS RELACIONALES

MEMBER: Verifica que el primer argumento sea


un elemento del segundo argumento.
(MEMBER objeto lista) --> Retorna Nil <>Nil
Si el primer argumento (objeto) es un elemento de segundo (lista), retorna el
fragmento de lista que comienza con el primer argumento.
Caso contrario retorna NIL .
Ej: (MEMBER 'A '(B A C))(A C)
Predicados lgicos:
NOT:Retorna T solo si su argumento es NIL, caso contrario
retorna NIL.
AND: Retorna NO NIL (distinto de NIL) solo si todos sus
argumentos son NO NIL
OR: Retorna NO NIL si algn argumento es distinto de NIL.
Componentes de un Sistema de
Programacin Funcional

SPF< O, F, operacin, F , D>


O: Conjunto de objetos
F: Conjunto de funciones F: OO ( reciben objetos como
argumentos y proyectan objetos)
x, y O y f F; f: x y
Operacin: existe una nica operacin que es la aplicacin.
x O y f F; f: x f(x)
F: Conjunto de funciones de orden superior o Formas
Funcionales F : FF ( reciben funciones como argumentos y
proyectan funciones)
f F / x O y f F; f : f U O f ; fog: x f:(g:x)
D: es un Mtodo para definir funciones
Resolver utilizando func primitivas

Componer una expresin que permita evaluar


en que posicin se encuentra un
determinado elemento en una lista de un
solo nivel que contiene los das de la
semana.
(lunes martes mircoles jueves viernes sbado
domingo)

en qu posicin se encuentra el jueves?


si quiero generalizar?

cmo puedo hacer para generalizar en el


ejemplo anterior (das de la semana), la lista
y el elemento?
cmo puedo hacer que la definicin
permanezca?
Componentes de un Sistema de
Programacin Funcional

SPF< O, F, operacin, F , D>


O: Conjunto de objetos
F: Conjunto de funciones F: OO ( reciben objetos como
argumentos y proyectan objetos)
x, y O y f F; f: x y
Operacin: existe una nica operacin que es la aplicacin.
x O y f F; f: x f(x)
F: Conjunto de funciones de orden superior o Formas
Funcionales F : FF ( reciben funciones como argumentos y
proyectan funciones)
f F / x O y f F; f : f U O f ; fog: x f:(g:x)
D: es un Mtodo para definir funciones propias del usuario
Con Nombre

DEFINICION DE FUNCIONES Sin Nombre

Lisp permite crear nuestras propias funciones a partir de las primitivas y


de otras funciones previamente definidas.
(DEFUN <nombre funcin>
(<parmetro 1> <parmetro 2>...<parmetro n>)
(<descripcin del proceso (cuerpo)>)
DEFUN: Es abreviatura de Definicin de Funcin. Habilita la confeccin de nuevas
funciones (Funciones del Usuario con Nombre).
<nombre funcin>: Es el primer elemento de la lista. Debe ser un smbolo atmico,
mediante el cual se identifica la funcin. DEFUN devuelve o entrega un valor (nombre
de la funcin apuntador).
(<parmetro 1>...<parmetro n>): Es la lista de parmetros de la funcin cuyos
valores se corresponden con los argumentos con los que se llama la funcin El pasaje
de parmetros es por valor; por lo tanto se retorna el valor resultado en el nombre de
la funcin.
(<descripcin del proceso (cuerpo)>): Es la descripcin del procedimiento donde se
manipulan los parmetros para obtener un resultado esperado.
EJEMPLOS
(defun ambos-extremos (lista)
(cons (car lista) (last lista)))
(ambos-extremos ( 2 4 2 6 8 ))( 2 8)

(defun opera (X Y)
( + X Y)
(/ X Y)
(* X Y) )
(opera 2 5) ???
Para tener en Cuenta

Para llamar la funcin que se ha definido se utiliza la misma


estructura que en el caso de las primitivas: el nombre seguido de
los argumentos (notacin Polaca Cambridge).
No hay definicin de programa principal.
La forma del programa principal,por donde comienza la ejecucin
es una secuencia de llamadas de funciones.
Las definiciones de funciones no se anidan; el sistema trabaja con
envoltura progresiva, con invocaciones anidadas (composicin de
funciones)
Las invocaciones a funciones se describen con la notacin prefija
Polaca de Cambridge.
FORMAS CONDICIONALES
If:
(If <test> <cond1> <cond2>)
Si test retorna <> NIL se evala cond1; Si test retorna NIL, se evala
cond2 (la cond2 puede o no estar)
Quin es el test?
COND: Es la estructura condicional ms completa. Selecciona un valor
entre varias alternativas. Ante La primer opcin de test < > NIL que
encuentre ejecutar el RESULTADO correspondiente. Sino ejecutar la
opcin de T en caso que existiera.
(COND _
(<TEST 1> <RESULTADO 1>)
(<TEST 2> <RESULTADO 2>) CLAUSULAS
(<TEST N> <RESULTADO N>)
( T <RESULTADO ALTERNATIVO )
EJEMPLOS
(defun evalua_palindromo (l)
(if ( equal l (reverse l) ) T nil))

(defun crea_palindromo (l)


( append l (reverse l)))

(defun programa_palindromo (l)


(cond (( or (atom l) ( null l)) nil)
(( evalua_palindromo l) T)
( T (crea_palindromo) l))))

(programa_palindromo ( 5 8 1)) nil???


) programa_palindromo ( 1 5 7 5 1) T
FUNCIONES DE ENTRADA Y SALIDA

(print s) escribe en una nueva lnea el valor de s y


devuelve dicho valor .
(read): lee un objeto de el canal de entrada y
devuelve ese objeto.
(read-line): lee una lnea desde el canal de
entrada, hasta que una entrada (return) es
encontrado; entregando consistentemente los
caracteres ledos.

Nota : la funcin read no involucra una asignacin


FORMAS FUNCIONALES (F)
Conocidas como Funciones de orden Superior. Reciben como
argumento funciones y proyectan funciones (ejemplo la composicin de
funciones)

APPLY:(APPLY < funcin> <lista >) permite insertar la funcin


dentro de la lista. (SETQ N '(2 5 3))(2 5 3)
+(2 3 5 ) ?NO (+ N) --> ERROR
(+2 3 5)? SI (APPLY '+ N)10
MAPCAR:(MAPCAR <funcin> <lista 1> <lista 2> ... <lista n>)
Permiten aplicar sucesivamente una funcin a cada elemento de una
lista. El resultado es una lista que contiene los valores retornados por
las sucesivas aplicaciones de la funcin a los elementos de la lista.
(MAPCAR 'NULL '(3 () 0 NIL F)) (NIL T NIL T NIL)
(MAPCAR 'EQUAL '(1 2 3) '(3 2 1)) (NIL T NIL)
EJERCICIOS PROPUESTOS
para F

Defina una funcin que calcule la media de


una lista de nmeros enteros.
Defina una funcin que entregue en una
lista, el cuadrado de cada uno de los
miembros de la lista que recibe como
argumento
Calcule el mximo valor de una lista de listas
de nmeros
FUNCIONES SIN NOMBRE:
EXPRESIONES LAMBDA

Las expresiones LAMBDA permiten definir una


funcin en el momento que se la utiliza.
La expresin LAMBDA sustituye a nombre en una
llamada a funcin. Por lo tanto estas funciones son
llamadas funciones annimas
(LAMBDA (<parmetros>) (<cuerpo de la funcin>)
<argumentos>)
Con Expresin Lambda realizo la Definicin y
Evaluacin de una Funcin
FUNCIONES SIN NOMBRE:
EXPRESIONES LAMBDA

En el ejemplo: Defina una funcin que entregue el cuadrado


de cada uno de los miembros de una lista
(Defun CC (L)
(Mapcar (Lambda (N) (*N N)) L) reemplazo el nombre de la
funcin por la definicin (inserto el cdigo en la llamada de la funcin)

Funciones Lambda

El modelo subyacente es el Calculus de Church (teora Matemtica


para evaluacin de funciones por sustitucin) ( X. *XX) : cte
Es decir para evaluar una funcin son efectuadas sustituciones, utilizando su
definicin como regla de reescrito (en subprogramas regla de la copia)
En Lisp la regla de la copia se explicita con definiciones Lambda
EJEMPLO EXPRESIONES LAMBDA

(DEFUN SEGUNDO (L)


(CAR (CDR L)))
(SEGUNDO '(A B C)) B

Usando LAMBDA:
(LAMBDA (L) (CAR (CDR L)) '(A B C)) B

Ejercicio: realizar el ejercicio que qued pendiente


en la parte A del practico
PARA TENER EN CUENTA

Verificacin de tipo Dinmica


Los programas en LISP, que son funciones, corren en
un ambiente interactivo y como resultado no existe un
programa principal de la manera usual.
Un programa se escribe como una secuencia de
expresiones que se van a evaluar.
Las funciones en LISP se definen por completo como
expresiones. Cada operador es una funcin que regresa
un valor.
El manejo de almacenamiento est basado en HEAP (o
en montn) con recolector de basura
RECURSIN

Estructura General de la Recursin


Un problema para ser tratado mediante recursin ha de
reunir tres caractersticas:
Su resolucin ha de poder ser descompuesta en la
resolucin de una etapa y la del resto del problema.
La resolucin del resto ha de ser anloga a la del
problema completo.
Debe existir un estado lmite del problema cuya
resolucin sea inmediata y que seale el fin del
proceso recursivo.
EJEMPLOS- recursin
(defun fact (n)
(cond ((equal n 1) 1)
(t (* n (fact (-n 1))))))
(fact 4) 24
(defun suma (x)
(cond ((null x) 0)
((atom x) x)
( t (+ (car x) (suma (cdr)))))
(suma ( 2 6 4 8 1)) 21
(defun cuente (x)
(cond ((null x) 0)
((atom x) 1)
((add1 (cuente (cdr x)))))
(cuente ( 9 4 1 8 4)) 5
EJERCICIOS PROPUESTOS

Veamos Recursin doble


Defina una funcin que permita contar tomos a cualquier nivel de
lista
(CAtom `( 2 (3 4) ((a) 4)) )
5

Contar la cantidad de movimientos para mover N discos de las


Torres de Hoanoi
Jugar a las Torres de Hanoi
http://www.pequejuegos.com/jugar-40.html
http://www.psicoactiva.com/juegos/hanoi/jg_hanoi.htm
http://www.uterra.com/juegos/torre_hanoi.php
EJERCICIOS PROPUESTOS
Veamos Recursin en construccin de Listas
Defina una funcin que permita concatenar dos listas ( las funciones sobre listas
pueden escribirse con car, cdr y cons)

Escribir una funcin que dada una lista devuelva una nueva lista donde cada
elemento ha sido duplicado.
(duplica-elementos-lista (a b c d e))(A A B B C C D D E E)

Contar el nro de artculos un, una, el, la ;en un texto que se ingresa como lista con
palabras.
(contarti `(una cabra en la montaa) (un una el la))
Escribir una funcin para eliminar los nmeros de una lista plana
(filtra-numeros (1 2 a c 4))(A C)
CONCLUSIONES

Si la solucin a un problema
involucra:
Sumergirse en una expresin y no solo a
buscar elementos de una lista entonces
tendr sentido la recursin.
Transformar una lista en otra nueva,
contabilizar ciertos elementos,
probablemente los mas indicado es la forma
funcional Mapcar.
LISTAS DE PROPIEDADES

Las Listas de Propiedades son un mtodo til de


estructurar datos en una lista.
Estas listas son construcciones que permiten disponer
la informacin en una forma semejante a la de un
registro en una base de datos. Y proporcionan otra
manera de almacenar y recuperar datos.
La lista de propiedades es una lista que tiene la
siguiente forma general: (p1 v1 p2 v2.....pn Vn)
donde los p son tomos que denotan propiedades y
las v son valores asociados, que pueden ser cualquier
Objeto de Lisp.
Se asocia a un smbolo un conjunto de componentes
LISTAS DE PROPIEDADES

Los smbolos atmicos pueden tener propiedades, por


ejemplo el smbolo persona puede propiedades
asociadas como Nombre, Dni, Sueldo Bsicos.
Ej Persona (Nombre (Jorge F. Garcia) Dni 32482567 Sueldo 1000)
Donde el primer elemento de la lista de pares es
llamado indicador o nombre de la propiedad y el
segundo elemento es el objeto o valor de la propiedad.
No debe haber ms de un valor y un indicador de
nombre por cada propiedad (nica)
Dado un smbolo y un indicador se puede obtener el
valor asociado.
Cuando se crea un smbolo por primera vez la lista de
propiedades est vaca.
LISTAS DE PROPIEDADES

Creacin de lista de Propiedades Completa


(setf (symbol-plist <smbolo>) <lista de propiedades>)
Ej.(setf (symbol-plist 'bolsa) '(contenido (queso pan) precio 40 peso 1))
(CONTENIDO (QUESO PAN) PRECIO 40 PESO 1)

ver la lista de Propiedades


(symbol-plist <simbolo>) devuelve la lista de propiedades asociada al
smbolo, si la hay, sino entrega NIL.
Ej. (symbol-plist 'bolsa)
(PKG::SYMBOL-NAME-STRING "BOLSA" CONTENIDO (QUESO PAN) PRECIO 40
PESO 1)
(symbol-plist 'bolsita) NIL
LISTAS DE PROPIEDADES

Get Recupera el valor de la Propiedad de un smbolo:


si la propiedad no existe entrega nil
Ej (get 'bolsa 'contenido) (QUESO PAN)
(get 'bolsa 'cantidad)NIL
Para insertar una propiedad nueva, se usa Get en
combinacin con Setf
Ej (setf (get 'bolsa 'cantidad) '20) 20
Para modificar el valor de la propiedad ya existente:
(setf (get 'bolsa 'contenido) '(queso torta pan )) (QUESO TORTA PAN)
suprimir una propiedad de la lista de propiedades:
(remprop <smbolo> <propiedad>) entrega la lista a partir
de la propiedad eliminada
Ej (remprop 'bolsa 'precio)(PRECIO 40 PESO 1)
LISTAS DE PROPIEDADES

Ej: Formo un Archivo con las listas de propiedades de los libros de


una biblioteca siendo el nombre del archivo Biblio.
Biblio(List A1 A2 A3)
Cada uno de los smbolos Ai tienen asociada la lista de propiedades
con indicadores Ttulo y Autor.
Definir una funcin que permita consultar de la Biblioteca, los ttulos
de los libros de un determinado Autor y que los entregue en una
lista.
1- Crear la lista de Propiedades de cada libro (smbolo)
2- Crear la lista de smbolos de libros (Archivo)
3- Definir la Funcin
4- Ejecutar (Consultar Autor Pratt-T-W Biblio)
LISTAS DE PROPIEDADES

1)(setf (symbol-plist A1) (Autor Pratt-T-W Titulo Leng-Prog))


(setf (symbol-plist A2) (Autor Pratt-T-W Titulo Prog-Leng))
(setf (symbol-plist A3) (Autor Winston Titulo Lisp))
2)Biblio(List A1 A2 A3) (setq Biblio (List A1 A2 A3) )
3)(Defun Consultar (PROP VALOR B)
(cond
( (null b) nil)
( (equal (get (car B) prop) Valor) (cons ((get (car b)Titulo) (consultar Prop
Valor (cdr B) )
( T (consultar Prop Valor (cdr B) ))))

Si tengo la propiedad Editorial asociada a los smbolos A1, A2, A3,podra invocar
(Consultar EDIT McGRAW-HILL Biblio)
Cierre de Lisp

Lenguaje Lisp

Corresponde al Permite
Implementar
Representacin
Sintctica
define provee
Paradigma
Aplicaciones
Programacin Funcional Prefija
en
Polaca de Cambridge
Polaca de Cambridge

Inteligencia
Artificial
Componentes Bsicos
Formas Especiales Program.de
Control de Secuencia Auto Cad

Implem. de
Se clasifican Intrpretes
en
Interfaces en
Objetos Funciones Leng.Natural
Cierre de Lisp

OBJETOS

Son basicamente

tomos Se denominan Listas


Expresiones
Simblicas

Segn su
Pueden ser
implementacin

Numricos Listas Enlazadas Listas de Propiedades


Simblicos

Par Punteado
T y Nil

Valores
Predefinidos
Pto.Fijo Pto.Flotante
True y False
Cierre de Lisp
FORMAS DE CONTROL

Se clasifican en

Seleccin
Recursin

Iteraccin
?????????
A travs
Las ms importancia
de
Estrategia de Control

IF COND A travs de
Func.Prim. Func.Prim.

Loop Mapcar
Func.Prim F.F

Itera Transforma

Formas Listas
Paradigma
Programacin Funcional

Se Caracteriza

Capacidad Descriptiva :se hace hincapi en la def. del problema

Modelo Subyacente el -Calculus (permite la abstraccin y la sustitucin)

Se basa en la Teora Formal de Funciones Matemticas, donde juegan un papel predominante


la Definicin y Aplicacin de Funciones
No hay instrucciones, sino que los programas se definen por llamadas a funciones ms simples.

Sus Componentes:
Conjunto de Objetos: tomos y Listas
Conjunto de Funciones: Proyectan Objetos en Objetos
Conjunto de Formas Funcionales: Proyectan Funciones en Funciones
Una nica operacin: La aplicacin [ F:X= F(X) ]
Un mtodo para Definir Funciones

Modalidad de trabajo: Composicin de Funcionesdonde el resultado de un clculo es la entrada


del siguiente, y as sucesivamente hasta que una composicin produce el valor deseado.

Sigue una filosofa de tratamiento no-destructivo de los parmetros, de modo que la mayora de
las funciones devuelven un lista resultado de efectuar alguna transformacin sobre la que
recibieron, pero sin alterar la original
PARADIGMA FUNCIONAL

FIN
CONSULTAS?

Vous aimerez peut-être aussi