Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CYPLP
PARADIGMAS
Un paradigma de programacin es un estilo de
desarrollo de programas. Es decir, un modelo para
resolver problemas computacionales. Los lenguajes de
programacin, necesariamente, se encuadran en uno o
varios paradigmas a la vez a partir del tipo de rdenes
que permiten implementar, tiene una relacin
directa con su sintaxis.
PRINCIPALES PARADIGMAS
Imperativo: sentencias + secuencias de
comandos
Declarativo. Los programas describen los
resultados esperados sin listar explcitamente
los pasos a llevar a cabo para alcanzarlos.
Lgico. Aserciones lgicas: hechos + reglas
Funcional. Los programas se componen de
funciones
Orientado a Objetos : Mtodos + mensajes.
PRINCIPALES PARADIGMAS
Otros son de aparicin relativamente reciente y no
forman parte del grupo principal:
Dirigido por eventos. El flujo del programa est
determinado por sucesos externos (por ejemplo, una
accin del usuario).
Orientado a aspectos. Apunta a dividir el
programa en mdulos independientes, cada uno con
un comportamiento bien definido.
PARADIGMA FUNCIONAL
Caractersticas de los lenguajes funcionales
Define un conjunto de datos
Provee un conjunto de funciones primitivas
Provee un conjunto de formas funcionales
Requiere de un operador de aplicacin
Caractersticas de los programas funcionales
Semntica basada en valores
Transparencia referencial
Regla de mapeo basada en combinacin o
composicin
Las funciones de primer orden
PROGRAMACIN FUNCIONAL
Funciones
El VALOR ms importante en la programacin
funcional es el de una FUNCIN
Matemticamente una funcin es un correspondencia :
f: A
B
A cada elemento de A le corresponde un nico elemento
en B
f(x) denota el resultado de la aplicacin de f a x
Las funciones son tratadas como valores, pueden ser
pasadas como parmetros, retornar resultados, etc.
PROGRAMACIN FUNCIONAL
Definiendo Funciones:
Se debe distinguir entre el VALOR y la DEFINICIN
de una funcin.
Existen muchas maneras de DEFINIR una misma
funcin, pero siempre dar el mismo valor, ejemplo:
DOBLE X = X + X
DOBLE X= 2 * X
Denotan la misma funcin pero son dos formas
distintas de definirlas
Tipo de una funcin
Puede estar definida explcitamente dentro del
SCRIPT, por ejemplo:
cuadrado::num
num
cuadrado x= x + x
O puede deducirse/inferirse
PROGRAMACIN FUNCIONAL
Expresiones y valores
La expresin es la nocin central de la programacin
Funcional
Caracterstica ms importante:
Una expresin es su VALOR
El valor de una expresin depende NICAMENTE de los
valores de las sub expresiones que la componen.
Las expresiones tambin pueden contener VARIABLES,
(valores desconocidos)
PROGRAMACIN FUNCIONAL
Expresiones y valores
La nocin de Variable es la de variable matemtica, no
la de celda de memoria. Diferentes ocurrencias del
mismo nombre hacen referencia al mismo valor
desconocido
Las expresiones cumplen con la propiedad de
TRANSPARENCIA REFERENCIAL: Dos expresiones
sintcticamente iguales darn el mismo valor, porque no
existen EFECTOS LATERALES
PROGRAMACIN FUNCIONAL
Ejemplos de expresiones para evaluar
Expresin
Valor
47
(* 4 7)
(+ 49 5)
47
28
54
Definiendo funciones.
cuadrado x = x * x
min x y = x, if x < y
y, if x > y
cube (x) = x * x * x
PROGRAMACIN FUNCIONAL
Un script es una lista de definiciones y.
Pueden someterse a evaluacin. Ejemplos:
?cuadrado (3 + 4 )
49
?min 3 4
3
?min(cuadrado ( 1 + 1 ) 3)
Pueden modificarse, ejemplo: Al script anterior le
agrego nuevas definiciones:
lado = 12
rea = cuadrado lado,
PROGRAMACIN FUNCIONAL
Algunas expresiones pueden NO llegar a reducirse del
todo, ejemplo: 1/0
A esas expresiones se las denominan CANNICAS,
pero se les asigna un VALOR INDEFINIDO y
corresponde al smbolo bottom(^)
Por lo tanto toda EXPRESIN siempre denota un
VALOR
PROGRAMACIN FUNCIONAL
Evaluacin de las expresiones:
La forma de evaluar es a travs de un mecanismo de
REDUCCIN o SIMPLIFICACIN
Ejemplo:
cuadrado (3 + 4)
=> cuadrado 7 (+)
=> 7 * 7 (cuadrado)
=> 49 (*)
Otra forma sera:
cuadrado (3 + 4)
=> (3 + 4) * (3 + 4) (cuadrado)
=> 7 * (3 + 4) (+)
=> 7 * 7 (+)
=> 49 (*)
No importa la forma de evaluarla, siempre el
resultado final ser el mismo
PROGRAMACIN FUNCIONAL
Orden aplicativo
Orden normal
(lazy evaluation)
No calcula ms de lo necesario
La expresin NO es evaluada hasta que
su valor se necesite
Una expresin compartida NO es
evaluada ms de una vez
PROGRAMACIN FUNCIONAL
TIPOS
Bsicos
Derivados
PROGRAMACIN FUNCIONAL
Expresiones de tipo polimrficas:
En algunas funciones no es tan fcil deducir su tipo.
Ejemplo:
id x = x
Esta funcin es la funcin Identidad
Su tipo puede ser de char
char, de num
num, etc.
Por lo tanto su tipo ser de B
B
Se utilizan letras griegas para tipos
polimrficos
Otro ejemplo: letra x = A
Su tipo ser B
char
PROGRAMACIN FUNCIONAL
Currificacin:
Mecanismo que reemplaza argumentos estructurados
por argumentos ms simples.
Ejemplo: sean dos definiciones de la Funcin Suma
1. Suma(x,y) = x + y
Suma x y = Sumax (y) = x + y
2. Suma x y = x + y
Existen entre estas dos definiciones una diferencia
sutil: Diferencia de tipos de funcin
Por cada valor de
El tipo de Suma es : (num,num) num
x devuelve una
El tipo de Suma es : num
(num num) funcin
Aplicando la funcin:
Suma(1,2)
3
Suma 1 2
Suma1 aplicado al valor 2
PROGRAMACIN FUNCIONAL
Clculo Lambda
El un modelo de computacin para definir funciones
Se utiliza para entender los elementos de la
programacin funcional y la semntica subyacente,
independientemente de los detalles sintcticos de un
lenguaje de programacin en particular.
Las expresiones del Lambda clculo pueden ser de 3
clases:
Un simple identificador o una constante. Ej: x, 3
Una definicin de una funcin. Ej:
x.x+1
Una aplicacin de una funcin. La forma es (e1 e2),
dnde se lee e1 se aplica a e2.
Ej: en la funcion cube (x) = x * x * x
x. x * x * x
x. x * x * x) 2)
Evaluamos la
funcin con 2
y resulta en 8
PROGRAMACIN LGICA
Es un paradigma en el cual los programas se son
una serie de aserciones lgicas.
El conocimiento se representa a travs de reglas
y hechos
Los objetos son representados por trminos, los
cuales contienen constantes y variables
PROLOG es el lenguaje lgico ms utilizado.
CLUSULAS DE HORN
Un programa escrito en un lenguaje lgico es una
secuencia de clusulas.
Las clusulas pueden ser: un Hecho o una Regla.
Hecho:
Expresan relaciones entre objetos
Expresan verdades
Son expresiones del tipo p(t1,t2,.tn)
Ejemplos:
tiene(coche,ruedas)
representa el hecho que un
coche tiene ruedas
longuitud([],0)
representa el hecho que una lista
vaca tiene longuitud cero
virus(ithaqua)
representa el hecho que ithaqua es
un virus.
CLUSULAS DE HORN
Regla:
Sintxis de Prolog
Clusula de Horn
Tiene la forma: conclusin :- condicin.
Dnde:
:- indica Si
conclusin es un simple predicado y
condicin es una conjuncin de predicados,
separados por comas. Representan un AND
lgico
Una regla en PROLOG
conclusin:-condiciones.
En un lenguaje procedural una regla la podramos
representar como: if condicin else conclusin;
Ejemplo:
virus(X):- programa(X),propaga(X)
PROGRAMAS Y QUERIES
Ejemplo de programa:
HECHO
OR
AND
longuitud ([],0).
longuitud ([X|Y],N) :- longuitud(Y, M), N=M + 1.
REGLA
QUERY
PROGRAMAS Y QUERIES
Programa:
longuitud ([],0).
longuitud ([X|Y],N) :- longuitud(Y, M), N=M + 1.
?-longuitud([rojo| [verde | [azul | [] ] ] ] ,X).
longuitud([verde | [azul | [] ] ],M) y X=M+1
longuitud([azul | [] ] ,Z) y M=Z+1
longuitud([],T) Z=T+1 T=0 => Z=1
M=2
X=3
EJECUCIN DE PROGRAMAS
Un programa es un conjunto de reglas y hechos que
proveen una especificacin declarativa de que es lo
que se conoce y la pregunta es el objetivo que
queremos alcanzar.
La ejecucin de dicho programa ser el intento de
obtener una respuesta.
Desde un punto de vista lgico la respuesta a esa
pregunta es YES, si la pregunta puede ser
derivada aplicando deducciones del conjunto de
reglas y hechos dados.
rel(a,b).
rel(a,f)
PROGRAMA
rel(a,c).
rel(b,f).
falla
rel(f,g).
clos(X,Y) :- rel(X, Y).
clos(X,Y) : - rel(X, Z), clos(Z, Y).
?-clos(a,f)
clos (a,f)
rel(a,Z1), clos(Z1,f)
QUERY
EJECUCIN
rel(a,b), clos(b,f)
rel(b,f)
YES
ver-nombre
ver-edad
ver-telfono
ver-documento
ver-sexo
cambiar-direccin
sacar-documento, etc.
EMPLEADO
Curriculum
cuil