Está en la página 1de 55

PARADIGMA DE LENGUAJE

FUNCIONAL

Paradigmas de Lenguajes
3er Año LCC- Facultad CEFyN - UNSJ -
INTRODUCCIÓN

 Propuesto por John MC Carthy en1960


 LISP es un lenguaje funcional, por lo tanto se basa en
definición de funciones y llamadas a funciones.
 Es un lenguaje fundamentado en la teoría formal de
Funciones Matemáticas, basado en la evaluación de
funciones y cuyo objetivo NO es la realización de
cálculos matemáticos con doble precisión.
 Fue diseñado originalmente para la manipulación de
fórmulas simbólicas, más adelante surge como un
lenguaje importante en la comunidad de Inteligencia
Artificial
INTRODUCCIÓN
 La esencia de la programación funcional es el uso de funciones para crear
programas, junto con las operaciones básicas de composición y recursión ;
pero a ello hay que añadir una propiedad fundamental, la transparencia
referencial

 Transparencia referencial: el valor de una función 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 prohíbe los efectos laterales.

 El cómputo de una función puede realizarse por reescritura o reducción:


sustitución de llamadas a funciones (según su definición) por los argumentos.
Por razones de eficiencia algunos lenguajes (p.e. LisP) incluyen ciertas
características imperativas, como las variables mutables.(Dejan de ser Puros)
Componentes de un Sistema de
Programación Funcional

 SPF< O, F, operación, F , D>


– O: Conjunto de objetos
– F: Conjunto de funciones F: OO ( reciben objetos como
argumentos y proyectan objetos)
∀ x, y ∊ O y ∀ f ∊ F; f: x y
– Operación: existe una única operación que es la aplicación.
∀ x ∊ O y ∀ f ∊ F; f: x Ξ f(x)
– F: Conjunto de funciones de orden superior o Formas
Funcionales F : FF ( 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 Método para definir funciones propias del usuario
OBJETOS

No se realiza la definición de tipo. Cada dato objeto lleva un descriptor en


tiempo de ejecución que muestra su tipo y otros atributos
 Atomos pueden ser números( punto fijo o punto flotante) y símbolos
(Conjunto de caracteres que empiezan con letra o numero)
Predefinidos: Tverdad; NIL falso
 Listas estructura más importante de Lisp
(A B C); ( F ( G E)); ()  NIL (NIL es átomo y lista)

La unidad básica de construcción de una lista es:

Célula CDR (cola de la lista)


elemental
Tiene dos punteros
CAR (cabeza de la lista)
OBJETOS ( continuación)

 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 (continuación)

 Par punteado (A.B)  B


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

 Todas estas estructuras se organizan en grupos


jerárquicos llamados s-expresiones.
Las clases más importantes son átomos y objetos celulares
Características

 LISP Hace uso siempre de una sección de memoria dinámica,


es decir la memoria se organiza durante la ejecución. La única
estática es el Sist. de Trabajo. Ej: Intérprete, 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 expresión simbólica ó s-expresión. El programa en
sí, queda representado por la forma s-expresión: "es la
unidad básica de un programa en LISP"
 Se destaca la equivalencia de formas entre los programas y los
datos del lenguaje.
 Otra característica es la confiabilidad de la recursión como
estructura de control en vez de iteración (ciclos).
Componentes de un Sistema de
Programación Funcional

 SPF< O, F, operación, F , D>


– O: Conjunto de objetos
– F: Conjunto de funciones F: OO ( reciben objetos como
argumentos y proyectan objetos)
∀ x, y ∊ O y ∀ f ∊ F; f: x y
– Operación: existe una única operación que es la aplicación.
∀ x ∊ O y ∀ f ∊ F; f: x Ξ f(x) / x es el parámetro que se fija en tiempo
de aplicación. La aplicación de f, genera otro valor.
– F: Conjunto de funciones de orden superior o Formas
Funcionales F : FF ( 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 Método para definir funciones propias del usuario


FUNCIONES PREDEFINIDAS

 Son los principales procedimientos que permiten


manipular los datos. Existen funciones
matemáticas y funciones para listas
 Las funciones se pueden clasificar en:
Funciones Aritméticas (átomos).
Formas Especiales (átomos y listas)
Funciones Básicas: LENGHT, REVERSE, SUBST (listas)
Analizadores, Constructores: permiten trabajar con lista.
Predicados: (átomos y listas)
Ligadura - Asignación - Evaluación

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


con el fin de almacenar un valor para un símbolo .
 Asignación: 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
evaluación.
 Efecto secundario: A todo aquello que un procedimiento ha
realizado y que persiste aún de devolver un valor se llama efecto
secundario. Los efectos secundarios son resultados implícitos.
 Las reglas de evaluación son las siguientes:
 El átomo numérico da el mismo como resultado.
 El átomo literal es considerado como una variable (es decir, la variable en LISP en
un símbolo) y da el valor más reciente asignado.
 Si la lista es vacía (), entonces evalúa NIL.
 La lista que sea diferente de NIL es considerada como una llamada a una función;
donde el primer elemento de la lista representa la función y los otros representan
los argumentos.
La Sintaxis de LISP

 La evaluación/aplicación de funciones usa la


notación completa:
polaca de cambridge con paréntesis (como las
estructuras de listas), con el nombre de la función
seguida de los argumentos
 Programas y datos comparten la misma sintaxis.
FUNCIONES MATEMÁTICAS

 (+ )  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
Evaluación y representación de expresiones

Expresión en matemática Expresión en Lisp


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

Evaluación es uniforme, la operación decide si se


evalúan los operandos.
Representación, es en forma del árbol, la evaluación
sigue este orden en el tiempo de ejecución
+
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 asignación (SET)
Si queremos L  (A B) entonces: (SETQ L '(A B)) (A B)
 Eval: Se dispara automáticamente cuando se escribe
una función .Pero también podemos usar la función
EVAL en forma explícita.
(SETQ A 'B) B ; (SETQ B 'C)  C; A B ; (EVAL A)C
FUNCIONES BÁSICAS

 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 expresión :
(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 posición 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 vacía o el final de
una lista (ya que NIL es el final de una lista). NULL es
más general, puesto que ENDP solo puede trabajar
sobre listas.
– NULL verifica que su argumento sea una lista vacía.
– ENDP verifica que lista esté vacía.
 ZEROP: Espera un átomo numérico 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 lógicos:
– 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 algún argumento es distinto de NIL.
Componentes de un Sistema de
Programación Funcional

 SPF< O, F, operación, F , D>


– O: Conjunto de objetos
– F: Conjunto de funciones F: OO ( reciben objetos como
argumentos y proyectan objetos)
∀ x, y ∊ O y ∀ f ∊ F; f: x y
– Operación: existe una única operación que es la aplicación.
∀ x ∊ O y ∀ f ∊ F; f: x Ξ f(x)
– F: Conjunto de funciones de orden superior o Formas
Funcionales F : FF ( 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 Método para definir funciones
Resolver utilizando func primitivas

Componer una expresión que permita evaluar


en que posición se encuentra un
determinado elemento en una lista de un
solo nivel que contiene los días de la
semana.
(lunes martes miércoles jueves viernes sábado
domingo)

¿en qué posición se encuentra el jueves?


¿si quiero generalizar?

 ¿cómo puedo hacer para generalizar en el


ejemplo anterior (días de la semana), la lista
y el elemento?
 ¿cómo puedo hacer que la definición
permanezca?
Componentes de un Sistema de
Programación Funcional

 SPF< O, F, operación, F , D>


– O: Conjunto de objetos
– F: Conjunto de funciones F: OO ( reciben objetos como
argumentos y proyectan objetos)
∀ x, y ∊ O y ∀ f ∊ F; f: x y
– Operación: existe una única operación que es la aplicación.
∀ x ∊ O y ∀ f ∊ F; f: x Ξ f(x)
– F: Conjunto de funciones de orden superior o Formas
Funcionales F : FF ( 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 Método 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 función>
(<parámetro 1> <parámetro 2>...<parámetro n>)
(<descripción del proceso (cuerpo)>)
 DEFUN: Es abreviatura de Definición de Función. Habilita la confección de nuevas
funciones (Funciones del Usuario con Nombre).
 <nombre función>: Es el primer elemento de la lista. Debe ser un símbolo atómico,
mediante el cual se identifica la función. DEFUN devuelve o entrega un valor (nombre
de la función apuntador).
 (<parámetro 1>...<parámetro n>): Es la lista de parámetros de la función cuyos
valores se corresponden con los argumentos con los que se llama la función El pasaje
de parámetros es por valor; por lo tanto se retorna el valor resultado en el nombre de
la función.
 (<descripción del proceso (cuerpo)>): Es la descripción del procedimiento donde se
manipulan los parámetros 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 función que se ha definido se utiliza la misma


estructura que en el caso de las primitivas: el nombre seguido de
los argumentos (notación Polaca Cambridge).
 No hay definición de programa principal.
 La forma del programa “principal”,por donde comienza la ejecución
es una secuencia de llamadas de funciones.
 Las definiciones de funciones no se anidan; el sistema trabaja con
envoltura progresiva, con invocaciones anidadas (composición de
funciones)
 Las invocaciones a funciones se describen con la notación prefija
Polaca de Cambridge.
FORMAS CONDICIONALES
 If:
(If <test> <cond1> <cond2>)
Si test retorna <> NIL se evalúa cond1; Si test retorna NIL, se evalúa
cond2 (la cond2 puede o no estar)
¿Quién es el test?
 COND: Es la estructura condicional más completa. Selecciona un valor
entre varias alternativas. Ante La primer opción de test < > NIL que
encuentre ejecutará el RESULTADO correspondiente. Sino ejecutará la
opción 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 línea 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 línea desde el canal de
entrada, hasta que una entrada (return) es
encontrado; entregando consistentemente los
caracteres leídos.

Nota : la función read no involucra una asignación


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

 APPLY:(APPLY „ < función> <lista >) permite insertar la “función”


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 „ <función> <lista 1> <lista 2> ... <lista n>)
Permiten aplicar sucesivamente una función a cada elemento de una
lista. El resultado es una lista que contiene los valores retornados por
las sucesivas aplicaciones de la función 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 función que calcule la media de


una lista de números enteros.
 Defina una función que entregue en una
lista, el cuadrado de cada uno de los
miembros de la lista que recibe como
argumento
 Calcule el máximo valor de una lista de listas
de números
FUNCIONES SIN NOMBRE:
EXPRESIONES LAMBDA

 Las expresiones LAMBDA permiten definir una


función en el momento que se la utiliza.
 La expresión “LAMBDA” sustituye a nombre en una
llamada a función. Por lo tanto estas funciones son
llamadas funciones anónimas
 (LAMBDA (<parámetros>) (<cuerpo de la función>)
<argumentos>)
Con Expresión Lambda realizo la Definición y
Evaluación de una Función
FUNCIONES SIN NOMBRE:
EXPRESIONES LAMBDA

 En el ejemplo: Defina una función 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
función por la definición (inserto el código en la llamada de la función)

Funciones Lambda

El modelo subyacente es el λ Calculus de Church (teoría Matemática


para evaluación de funciones por sustitución) (λ X. *XX) : cte
Es decir para evaluar una función son efectuadas sustituciones, utilizando su
definición 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

 Verificación de tipo Dinámica


 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 función que regresa
un valor.
 El manejo de almacenamiento está basado en HEAP (o
en montón) con recolector de basura
RECURSIÓN

Estructura General de la Recursión


Un problema para ser tratado mediante recursión ha de
reunir tres características:
 Su resolución ha de poder ser descompuesta en la
resolución de una etapa y la del resto del problema.
 La resolución del resto ha de ser análoga a la del
problema completo.
 Debe existir un estado límite del problema cuya
resolución sea inmediata y que señale el fin del
proceso recursivo.
EJEMPLOS- recursión
 (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 Recursión doble


 Defina una función 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 Recursión en construcción de Listas
 Defina una función que permita concatenar dos listas ( las funciones sobre listas
pueden escribirse con car, cdr y cons)

 Escribir una función 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 artículos un, una, el, la ;en un texto que se ingresa como lista con
palabras.
(contarti `(una cabra en la montaña) ´(un una el la))
 Escribir una función para eliminar los números de una lista plana
(filtra-numeros ‟(1 2 a c 4))(A C)
CONCLUSIONES

Si la solución a un problema
involucra:
 Sumergirse en una expresión y no solo a
buscar elementos de una lista entonces
tendrá sentido la recursión.
 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 método útil de


estructurar datos en una lista.
 Estas listas son construcciones que permiten disponer
la información 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 símbolo un conjunto de componentes
LISTAS DE PROPIEDADES

 Los símbolos atómicos pueden tener propiedades, por


ejemplo el símbolo persona puede propiedades
asociadas como Nombre, Dni, Sueldo Básicos.
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 más de un valor y un indicador de
nombre por cada propiedad (única)
 Dado un símbolo y un indicador se puede obtener el
valor asociado.
 Cuando se crea un símbolo por primera vez la lista de
propiedades está vacía.
LISTAS DE PROPIEDADES

 Creación de lista de Propiedades Completa


(setf (symbol-plist <símbolo>) <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
símbolo, 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 símbolo:


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
combinación 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 <símbolo> <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 símbolos Ai tienen asociada la lista de propiedades
con indicadores Título y Autor.
Definir una función que permita consultar de la Biblioteca, los títulos
de los libros de un determinado Autor y que los entregue en una
lista.
1º- Crear la lista de Propiedades de cada libro (símbolo)
2º- Crear la lista de símbolos de libros (Archivo)
3º- Definir la Función
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 símbolos A1, A2, A3,podría invocar
(Consultar „EDIT „McGRAW-HILL Biblio)
Cierre de Lisp

Lenguaje Lisp

Corresponde al Permite
Implementar
Representación
Sintáctica
define provee
Paradigma
Aplicaciones
Programación Funcional Prefija
en
Polaca de Cambridge
Polaca de Cambridge

Inteligencia
Artificial
Componentes Básicos
Formas Especiales Program.de
Control de Secuencia Auto Cad

Implem. de
Se clasifican Intérpretes
en
Interfaces en
Objetos Funciones Leng.Natural
Cierre de Lisp

OBJETOS

Son basicamente

Átomos Se denominan Listas


Expresiones
Simbólicas

Según su
Pueden ser
implementación

Numéricos Listas Enlazadas Listas de Propiedades


Simbólicos

Par Punteado
T y Nil

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

Se clasifican en

Selección
Recursión

Iteracción
?????????
A través
Las más importancia
de
Estrategia de Control

IF COND A través de
Func.Prim. Func.Prim.

Loop Mapcar
Func.Prim F.F

Itera Transforma

Formas Listas
Paradigma
Programación Funcional

Se Caracteriza

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

Modelo Subyacente el -Calculus (permite la abstracción y la sustitución)

Se basa en la Teoría Formal de Funciones Matemáticas, donde juegan un papel predominante


la Definición y Aplicación de Funciones
No hay instrucciones, sino que los programas se definen por llamadas a funciones más 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 operación: La aplicación [ F:X= F(X) ]
Un método para Definir Funciones

Modalidad de trabajo: Composición de Funcionesdonde el resultado de un cálculo es la entrada


del siguiente, y así sucesivamente hasta que una composición produce el valor deseado.

Sigue una filosofía de tratamiento no-destructivo de los parámetros, de modo que la mayoría de
las funciones devuelven un lista resultado de efectuar alguna transformación sobre la que
recibieron, pero sin alterar la original
PARADIGMA FUNCIONAL

FIN
¿CONSULTAS?

También podría gustarte