Pregunta c)
Indica 4 conceptos que sean propios del paradigma declarativo (lógico, funcional o lógico funcional). Incluye una breve explicación de su significado. Teneis que elegir los que considereis mas importantes.
Los lenguajes declarativos facilitan la escritura de relaciones y funciones y en ellos no se hacen nunca asignaciones a variables. Están considerados como “de más alto nivel”, ya que un programador declarativo trabaja con conceptos, más que con localizaciones dentro de la propia máquina, es decir, está basado en el pensamiento humano y las matemáticas; y más alejado del modelo de ordenador.
El estilo declarativo se caracteriza por un conjunto de aspectos, los cuales se entienden mejor al citarlos y con ello describir las diferencias que los separan de otros paradigmas:
- Los lenguajes declarativos están orientados a buscar la solución del problema, sin preocuparse por la forma de llegar a ello; es decir, el programador debeconcentrarse en la lógica del algoritmo, más que en el control de la secuencia.
- Los programas están formados por un conjunto de definiciones o ecuaciones, las cuales describen lo que debe ser calculado, no en sí la forma de hacerlo.
- Las variables sólo pueden tener asignado un solo valor a lo largo de la ejecución del programa, lo cual implica que no puede existir asignación destructiva. Debido a esto, cobra especial importancia el uso del anidamiento y la recursividad.
- Las listas representan la estructura fundamental de datos.
- El orden de la ejecución no resulta importante debido a que no existen efectos colaterales; es decir, que al calcular un valor, resulta imposible afectar el cálculo de otros y con esto se puede afirmar que cualquier secuencia de ejecución deberá de conducir al mismo resultado.
- Las expresiones o definiciones pueden ser usadas como valores y por lo tanto se
pueden tratar como argumentos de otras definiciones. - El control de la ejecución no es responsabilidad del programador
Después de haber hablado un poco sobre los lenguajes declarativos y conocer un poco por encima sus caracteristicas destacaremos los siguientes conceptos básicos:
EVALUACIÓN PEREZOSA: Al utilizar esta técnica se escoje siempre el redex mas externo ( "outermost"). Esto proporciona ciertas ventajas como concebir cada parte del problema de forma separada, proporciona cohesión ( no tiene que ser programada) , reutilización de funciones, eficiencia ( se ahorra trabajo) , es especialmente útil en problemas del tipo generar solución - comprobar si es válida ...
ORDEN SUPERIOR: Es un nuevo paso de abstracción. Su idea fundamental es tratar las funciones como datos del lenguaje de manera que pueden usarse en los programas como los otros datos. Esto supone funciones como argumento de otras funciones , funciones que producen funciones como resultado , estructuras de datos con funciones como componentes ...
INFERENCIA DE TIPOS: Este concepto está basado en la capacidad de deducir el tipo de una expresión a partir de la sintaxis. El compilador realiza un analisis estático del programa a partir de las funciones previas, y así , el tipo de las funciones es reconstruído.
TRANSPARENCIA REFERENCIAL: Como los programas son expresiones matemáticas, es posible sustituir variables por valores, lo que permite manipular los programas como ecuaciones. Una expresión siempre proporciona el mismo resultado, es decir, es evaluada, siempre, del mismo modo. Esto no es cierto en los lenguajes imperativos donde pueden existir efectos laterales. Gracias a la transparencia referencial podemos usar la operación de sustitución: la aplicación de una función se puede sustituir por su definición. Por ejemplo:
par(doble(2*5))=par(doble 10)=par(2*10)=par(20)=true.
