Introducción: modelos abstractos de cómputo.
Se puede descargar el compilador para desarrollar los programas en:
http://www.issi.uned.es/fp/archive/cmasmenos.exe
"Los lenguajes de programación permiten describir programas o cómputos de manera formal, y por tanto simbólica y rigurosa." Expliquemos esta frase:
Qué quiere decir de manera formal? no tiene nada que ver con el concepto de forma aristotélica. Parece que mas bien se refiere a la segunda acepción del RAE: "Que cumple con las condiciones necesarias o con los requisitos establecidos.". Es decir que los lenguajes de programación cumplen unos requisitos y unas condiciones para ser así rigurosos.
Se basan en elementos básicos y "formas" -que no tiene nada que ver con el anterior concepto "formal"- mas bien equivale a "modos" o "maneras" de combinar los elementos simples -básicos-, para construir programas tan complejos como sea necesario.
Analizando los múltiples lenguajes de programación, vemos que algunos de ellos tienen elementos básicos y formas de combinación de los mismos similares. Se dice entonces que este conjunto de lenguajes de programación forman un modelo abstracto de cómputo, prescindiendo de la notación o símbolos concretos usados en cada lenguaje de programación para representarlos.
Vamos a ver los modelos abstractos de cómputo mas representativos:
Modelo funcional: Se basa casi exclusivamente en el empleo de funciones. Una función es una "aplicación" que hace corresponder un elemento del conjunto de destino -resultado- con cada elemento de un conjunto de partida -argumento-. (No se entiende absolutamente nada.) Parece una correlación unívoca, no biyectiva, de dos conjuntos algebraicos. De forma convencional se representa como f(x) al resultado que se obtiene al aplicar la función f al argumento x.
Los ordenadores apenas pueden operar con funciones primitivas: suma, resta, multiplicación y división. A partir de ellas se pueden obtener todas las funciones que se precisen: Cuadrado(x) := Producto (x,x).
Cuando en un cómputo intervienen funciones definidas, la evaluación se sigue haciendo por sustitución. El proceso, llamado reescritura, consiste en reemplazar la función por su definición, sustituyendo los argumentos simbólicos en la definición por los argumentos reales en el cómputo:
Ejemplo: evaluar (7 + 3)^2:
Cómputo parcial.................... Resultado
........................................... Cuadrado(Suma(7, 3))
reducir Suma........................Cuadrado(10)
reescribir Cuadrado ................Producto(10,10)
reducir Producto....................100
Modelo de flujo de datos: En este modelo de cómputo, el programa corresponde a una red de operadores interconectados entre si. Cada operador se representa por un cuadrado -se parece enormemente al funcionamiento de las distintas puertas or, and, ... del hard- conectadas entre sí para formar los componentes del ordenador. En cambio, aquí siempre las "puertas" tienen dos entradas y una sola salida, como las or, and, xor,... y la información no es binaria, sino simbólica. Las "puertas" no son or y and, sino sumadores y multiplicadores.
Modelo de programación lógica: Un programa consiste en plantear de manera "formal",(otra vez esta palabreja), un problema a base de declarar una serie de elementos conocidos y luego preguntar por el resultado, dejando que sea la propia máquina la que decida como obtenerlo.
En programación lógica los elementos conocidos que pueden declararse son hechos y reglas:
Un hecho es una relación entre objetos concretos: Hijo(Juan, Luis) Significaría que Juan es hijo de Luis.
Podemos añadir:
Hijo(Mario, Luis)
Hijo(Carlos, Luis)
Hijo(Bety, Luis)
Hijo(Mario, Pepa)
Hijo(Carlos, Pepa)
Hijo(Bety, Pepa)
CONSULTAS:
Expresaremos el dato conocido y el dato sin conocer de un hecho: Hijo(Carlos, y). Respuestas: y = Luis; y = Pepa.
REGLAS:
Una regla es una ralación general entre objetos que cumplen ciertas propiedades. La potencia de la programación lógica es cuando declaramos. Por ejemplo, una regla: Hijo(x, y):- Padre(y, x). Con ello creamos una relación inversa: Hijo(Carlos, Luis) Padre (Luis, Carlos).
Otra regla: Hermano(x, y):- Hijo(x, z)
Comentarios
Publicar un comentario