• No results found

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 superiormejor abstracción

mejor modularización

Evaluación eficiente

reducción deterministaevaluació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

Integración de Paradigmas