INDIVIDUAL ACKNOWLEDGMENT
END OF SECTION
4.21 DEVIATIONS FROM PLANS AND SPECIFICATIONS
Programaci ´on L ´ogica
• Se basa en (fragmentos de) la lógica de
predicados: lógica de cláusulas de Horn (HCL).
• Define relaciones mediante cláusulas
Programación Declarativa
Programaci ´on L ´ogica: Ejemplo
• Concatenación de dos listas.
app([ ], X, X) ←
Programación Declarativa
Programaci ´on L ´ogica: Ejemplo
• Concatenación de dos listas.
app([ ], X, X) ←
app([X|Xs], Y, [X|Zs]) ← app(Xs, Y, Zs)
• Lectura declarativa:
La concatenación de la lista vacía [ ] y otra lista X
Programación Declarativa
Programaci ´on L ´ogica: Ejemplo
• Concatenación de dos listas.
app([ ], X, X) ←
app([X|Xs], Y, [X|Zs]) ← app(Xs, Y, Zs)
• Lectura declarativa:
La concatenación de [X|Xs] e Y es la lista que
Programación Declarativa
Programaci ´on L ´ogica: Ejemplo
• Concatenación de dos listas.
app([ ], X, X) ←
app([X|Xs], Y, [X|Zs]) ← app(Xs, Y, Zs)
• Lectura operacional:
Para concatenar dos listas [X|Xs] e Y primero es
Programación Declarativa
Programaci ´on L ´ogica: Ejemplo
• Concatenación de dos listas.
app([ ], X, X) ←
app([X|Xs], Y, [X|Zs]) ← app(Xs, Y, Zs)
• Lectura operacional:
La concatenación de la lista vacía [ ] y otra lista X
Programación Declarativa
Programaci ´on L ´ogica: Ejemplo
Principales características de este programa: • Gestión automática de la memoria
• Mecanismo de cómputo que permite una
búsqueda indeterminista (built-in search) de soluciones:
Programación Declarativa
Programaci ´on L ´ogica: Ejemplo
Principales características de este programa: • Gestión automática de la memoria
• Mecanismo de cómputo que permite una
búsqueda indeterminista (built-in search) de soluciones:
Responde a diferentes objetivos (sin necesidad de efectuar ningún cambio en el programa),
Programación Declarativa
Programaci ´on L ´ogica: Ejemplo
Principales características de este programa: • Gestión automática de la memoria
• Mecanismo de cómputo que permite una
búsqueda indeterminista (built-in search) de soluciones:
Programación Declarativa
Programaci ´on L ´ogica: Ejemplo
Principales características de este programa: • Gestión automática de la memoria
• Mecanismo de cómputo que permite una
búsqueda indeterminista (built-in search) de soluciones:
Relación de entrada/salida no está fijada de antemano.
Programación Declarativa
Programaci ´on L ´ogica: Sem ´antica operacional
• Resolución SLD (regla de computación ϕ)
(G ≡← Q1∧A0∧Q
2), ϕ(G) = A0, C ≡ (A ← Q) <<Π, σ = mgu(A,A0)
G =⇒σSLD ← σ(Q1 ∧ Q ∧ Q2)
• Procedimiento de prueba por refutación SLD: regla de computación + regla de ordenación +
Programación Declarativa
Programaci ´on Funcional
• Se basa en el concepto de función (matemática) y su definición mediante ecuaciones, que
constituyen el programa.
• Computación = reducción determinista de
expresiones (funcionales) para obtener un valor.
Programación Declarativa
Programaci ´on Funcional: Ejemplo
• Concatenación de dos listas.
data [t] = [ ] | [t : [t]] app :: [t] → [t] → [t] app [ ] x = x
Programación Declarativa
Programaci ´on Funcional: Ejemplo
Principales características de este programa:
• Necesidad de fijar el perfil de la función (dominio
+ rango) =⇒ idea de tipo de datos
[Lenguajes fuertemente basados en tipos]
Programación Declarativa
Programaci ´on Funcional: Ejemplo
Principales características de este programa:
• Necesidad de fijar el perfil de la función (dominio
+ rango) =⇒ idea de tipo de datos
[Lenguajes fuertemente basados en tipos]
• Se ha declarado la estructura de datos lista: “[ ]” y “:” son los constructores del tipo
Programación Declarativa
Programaci ´on Funcional: Ejemplo
Principales características de este programa:
• Necesidad de fijar el perfil de la función (dominio
+ rango) =⇒ idea de tipo de datos
[Lenguajes fuertemente basados en tipos]
• Se ha declarado la estructura de datos lista:
Programación Declarativa
Programaci ´on Funcional:
Otras caracter´ısticas de las funciones (matem ´aticas)
• Transparencia referencial: la salida viene
determinado exclusivamente por la entrada.
=⇒
• No efectos laterales;
• Permite el razonamiento ecuacional (substitución de iguales por iguales); • Cómputos deterministas.
Programación Declarativa
Programaci ´on Funcional:
Otras caracter´ısticas de las funciones (matem ´aticas)
• Composición de funciones:
• Permite la construcción de programas mediante el empleo de funciones primitivas o
previamente definidas por el usuario;
Programación Declarativa
Programaci ´on Funcional: Orden superior
• Empleo de las funciones como “ciudadados de primera clase”.
• Ejemplo: Funciones de Curry
(+) :: Integer → Integer → Integer > 2 + 3
Programación Declarativa
Programaci ´on Funcional: Orden superior
• Empleo de las funciones como “ciudadados de primera clase”.
• Ejemplo: Funciones de Curry
(+) :: Integer → Integer → Integer > (2 +)
Programación Declarativa
Programaci ´on Funcional: Orden superior
• Empleo de las funciones como “ciudadados de primera clase”.
• Ejemplo: Las funciones se pueden pasar como argumentos
map :: (t1 → t2) → [t1] → [t2] map f [ ] = [ ]
Programación Declarativa
Programaci ´on Funcional: Sem ´antica operacional
• β–reducción (aproximación clásica: λ–cálculo)
(λx.λy. + x y) 3 2 →β (λy. + 3 y) 2 →β + 3 2 →δ 5
• Estrategias de evaluación:
• función de selección para redexes: leftmost vs.
rightmost; innermost vs. outermost.
• orden aplicativo (voraz, call by value): leftmost
Programación Declarativa
Programaci ´on Funcional: Sem ´antica operacional
• Reescritura (aproximación algebraica)
(l = r) << Π, (∃p)(∃σ).σ(l) = t|p
t →σ t[σ(r)]p
• Estrategias de evaluación:
• función de selección para redexes: leftmost vs.
rightmost; innermost vs. outermost.
Programación Declarativa
Programaci ´on L ´ogica vs. Funcional: Diferencias
Programaci ´on L ´ogica Programaci ´on Funcional PROGRAMA:
Conjunto de cláusulas que defi- nen relaciones
PROGRAMA:
Conjunto de ecuaciones que de- finen funciones.
SEMANTICA OPERACIONAL´ :
Resolución SLD (unificación)
SEMANTICA OPERACIONAL´ :
Reducción (ajuste de patrones)
SEMANTICA DECLARATIVA´ :
Teoría de modelos (Modelo mí-
SEMANTICA DECLARATIVA´ :
Programación Declarativa
Programaci ´on L ´ogica vs. Funcional: Diferencias
Primer orden Orden superior
Indeterminismo; Variables lógi- cas; Datos parcialmente especi- ficados; E/S adireccional
Determinismo; Sin variables ló- gicas; Datos completamente es- pecificados; E/S direccional
Sin tipos Tipos y polimorfismo
Programación Declarativa
Ventajas de los Lenguajes Funcionales respecto a los L ´ogicos
• Funciones de orden superior • mejor abstracción
• mejor modularización
• Evaluación eficiente
• reducción determinista • evaluación perezosa
Programación Declarativa
Ventajas de los Lenguajes L ´ogicos respecto a los Funcionales
• Búsqueda de soluciones indeterminista.
• Mayor potencia expresiva (e.g. variables extra; información parcial; inversibilidad).
• Aplicaciones en investigación operativa, BD e IA. • Programación con restricciones (constraint