Programación lógica Y Funcional
b00tst38p28 de Enero de 2014
627 Palabras (3 Páginas)1.087 Visitas
Unidad 1. Conceptos fundamentales
1.1 Estilos de programación
Programación imperativa. Es un estilo de programación en el que los programas están formados por instrucciones que especifican cómo se ha de calcular el resultado.
Programa: secuencia de instrucciones a ser ejecutadas por la máquina.
Asignación: es la instrucción más simple que cambia el valor de una variable.
Instrucciones de control: decisión, repetición.
Ejemplos: Pascal, C/C++, Java, .NET, Perl, Python, etc.
Programación declarativa.
Programa: especificación del problema a resolver.
Variables lógicas: no hay asignación, las variables no varían.
Recursividad en lugar de repetición.
Lenguaje lógico y matemático.
Ejemplos: SQL, ProLog, LISP, haskell, BABEL.
Programación funcional. Es un estilo de programación cuyo método de computación es la aplicación de funciones a sus argumentos. Los cálculos se ven como una función matemática que hace corresponder entradas y salidas.
Permiten realizar evaluación paralela y ofrecen facilidades tales como disciplina de tipos, funciones de orden superior, datos potencialmente infinitos y evaluación perezosa.
No hay noción de posición de memoria y por lo tanto, necesidad de una instrucción de asignación. Los bucles se modelas a través de recursividad ya que no hay manera de incrementar o disminuir el valor de una variable.
NOTA: como aspecto práctico casi todos los lenguajes soportan el concepto de variable, asignación y bucle.
Ejemplo: Hoja de cálculo.
En una hoja de cálculo, se especifica cada celda en términos de los valores de otras celdas. El objetivo es que debe ser calculado y no en como debe calcularse.
No especificamos el orden en el que las celdas serán calculadas, en cambio obtenemos el orden que garantiza que la hoja de cálculo puede calcular las celdas respetando las dependencias.
No indicamos a la hoja de cálculo como manejar la memoria, en cambio esperamos que nos presente un plano de celdas, aparentemente infinito, pero que solo utiliza la memoria de las celdas que están actualmente en uso.
Lo más importante, especificamos el valor de una celda por una expresión (cuyas partes pueden ser evaluadas en cualquier orden), en vez de una secuencia de comandos que calculan los valores.
Ventajas:
Brevedad. Los programas son más cortos y concisos.
Más fáciles de entender (corregir y mantener).
Fuertemente tipado (no hay core dumps).
Reusabilidad (polimorfismo).
Abstracción (clases, módulos).
Manejo dinámico de memoria (no hay punteros, new, etc).
Más fácil razonar formalmente acerca de los programas.
Programación lógica. Podría ser entendida como programación relacional. Tiene fuertes fundamentos matemáticos (lógica de predicados, concretamente clausulas de Horn) basada en una interpretación procedural del cálculo de predicados de primer orden.
Los cómputos son demostraciones constructivas de existencia de un resultado, realizadas en la lógica de predicados.
Los lenguajes lógicos son superiores a los funcionales en la flexibilidad y potencia de cálculo ligadas a la unificación y comportamiento lógico de las variables. Soporta datos parcialmente construidos y da un carácter no direccional a los procedimientos, rompiendo la tradicional distinción entre “entrada” y “salida”.
Variable lógica
Unificación
El indeterminismo
Resolución
Lenguajes lógicos
Lenguajes funcionales
Sin tipos
Con tipos
...