Un Paradigma declarativo, es un paradigma de programación que está basado en el desarrollo de programas especificando o "declarando" un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solución. La solución es obtenida mediante mecanismos internos de control, sin especificar exactamente cómo encontrarla. No existen asignaciones destructivas, y las variables son utilizadas con Transparencia referencial.
CARACTERÍSTICAS:
Transparencia referencial: cada expresión denota un único valor que no puede ser cambiado evaluando la expresión o permitiendo que diferentes partes del programa compartan la expresión.
La evaluación de una expresión simplemente cambia la forma de la expresión pero nunca su valor. Todas las referencias a la expresión son por lo tanto equivalentes al valor mismo, y el hecho de que la expresión pueda ser referenciada desde otras partes del programa no se altera ese valor.
Por su transparencia referencial, una función matemática puede ser vista como una caja negra que computa valores de salida solamente en términos de sus valores de entrada. Esta propiedad es lo que distingue a las funciones matemáticas de las funciones que se pueden escribir en lenguajes de programación imperativa.
Evaluación perezosa: sólo se calcula una expresión si realmente se necesita su valor.
Lo opuesto a evaluación perezosa es la evaluación voraz, en la cual se calculan completamente los parámetros actuales para evaluar una función.
Una ventaja de la evaluación perezosa se observa en el siguiente ejemplo:
Divisible :: Int -> Int -> Bool
Divisible x y = x ‘rem’ y==0
Divisores :: Int -> [Int]
Divisores x = filter (divisible x) [1..x]
Primo :: Int -> Bool
Primo x = divisores x == [1,x]
Con la evaluación perezosa no se calculan todos los divisores de x y se compara el resultado con [1,x] a menos que esto sea en verdad necesario (cuando x es primo y en este caso , sólo habrán dos divisores).
Cláusulas de Horn: una cláusula de Horn es una disyunción de literales donde a los sumo uno de ellos es positivo.
Las cláusulas de Horn son conocidas en computación porque tienen buen comportamiento computacional. Por ejemplo, la satisfacibilidad proposicional es NP-completo pero la satisfacibilidad de una fórmula proposicional expresable como conjunción de cláusulas de Horn es P-completo. Las cláusulas de Horn y resolución lineal son la base de la programación lógica.
Funciones de Orden Mayor: son funciones que tienen como parámetros otras funciones.
Las funciones de orden mayor tienen similar papel en los lenguajes funcionales que las estructuras de control en los lenguajes imperativos. Pero mientras en los lenguajes imperativos las estructuras de control son primitivas, en los lenguajes funcionales uno puede definir estas funciones de orden mayor. Esto hace a los lenguajes funcionales más flexibles (hay pocas primitivas pero uno puede definir todas las demás que necesite: ortogonalidad).
No hay comentarios:
Publicar un comentario