Programación funcional
En ciencias de la computación, la programación
funcional es un paradigma de programación declarativa basado en la
utilización de funciones aritméticas que no maneja datos mutables o de estado.
Enfatiza la aplicación de funciones, en contraste con el estilo de programación
imperativa, que enfatiza los cambios de estado. La programación funcional tiene
sus raíces en el cálculo lambda, un sistema formal desarrollado en los años
1930 para investigar la definición de función, la aplicación de las funciones y
la recursión. Muchos lenguajes de programación funcionales pueden ser vistos
como elaboraciones del cálculo lambda.
En la práctica, la diferencia entre una
función matemática y la noción de una "función" utilizada en la
programación imperativa es que las funciones imperativas pueden tener efectos
secundarios, al cambiar el valor de cálculos realizados previamente. Por esta
razón carecen de transparencia referencial, es decir, la misma expresión
sintáctica puede resultar en valores diferentes en diferentes momentos
dependiendo del estado del programa siendo ejecutado. Con código funcional, en
contraste, el valor generado por una función depende exclusivamente de los
argumentos alimentados a la función. Al eliminar los efectos secundarios se
puede entender y predecir el comportamiento de un programa mucho más fácilmente,
y esta es una de las principales motivaciones para utilizar la programación
funcional.
Sistemas de tipos en lenguajes
lógico-funcionales.
La programación lógico-funcional es un
paradigma de programación declarativa muy expresivo, fruto de la combinación de
la programación funcional y la programación lógica. Entre sus principales
características destacan la posibilidad de de1nir funciones indeterministas,
los patrones de orden superior y el uso de variables libres que se ligan a
valores adecuados durante el cómputo. Desde el punto de vista de tipos, los
sistemas lógico-funcionales han adoptado de manera directa el sistema de tipos
de Damas-Milner, proveniente del ámbito funcional, debido a su sencillez y a la
existencia de tipos principales y métodos efectivos para la inferencia de
tipos. Sin embargo, esta adaptación directa no maneja adecuadamente algunas de
las principales características de los lenguajes lógico-funcionales como los
patrones de orden superior o las variables libres, dando lugar errores de tipos
durante la evaluación. En esta tesis proponemos tres sistemas de tipos
adecuados para la programación lógico-funcional cuyo objetivo es manejar
correctamente estas características problemáticas desde el punto de vista de
los tipos. Los sistemas de tipos propuestos, que tratan diferentes mecanismos
de cómputos lógico funcionales (reescritura y estrechamiento), dan solución a
los mencionados problemas, proporcionando resultados técnicos de corrección.
Además, suponen un mejora sobre propuestas previas de sistemas de tipos para
programación lógico-funcional, ya que salvan algunas de sus limitaciones.
Aparte de los resultados teóricos, en esta tesis también se han desarrollado
implementaciones de los sistemas de tipos, integrándolos como fase de comprobación
de tipos en ramas del sistema lógico-funcional Toy.
Aplicación de Rutinas en Pseudocódigo en
C++
Probablemente la mejor manera de comenzar a
aprender un lenguaje de programación es escribir un programa.
// my first program in C++
#include <iostream>
using namespace std;
int main ()
{
cout << "Hello
World!";
return 0;
}
// my first program in C++
Esta es una línea de comentario. Todas
las líneas que comienzan con dos signos de barra (/ /) se consideran
comentarios y no tienen ningún efecto en el comportamiento del programa. El
programador puede utilizar para incluir breves explicaciones u observaciones
dentro del propio código fuente.
# Include <iostream>
Las líneas que comienzan con una
almohadilla (#) son directivas para el preprocesador. No son líneas de
código con expresiones regulares, pero las indicaciones de preprocesador del
compilador. En este caso, la directiva # include <iostream> dice al
preprocesador para incluir el archivo iostream estándar. Este archivo
específico (iostream) incluye las declaraciones de la biblioteca de sistema
básico de entrada-salida estándar de C + +
using namespace std;
Todos los elementos del estándar de C + +
biblioteca se declaran dentro de lo que se llama un espacio de nombres, el
espacio de nombres con el nombre std. Así que con el fin de acceder a su
funcionalidad, declaramos con esta expresión que vamos a utilizar estas
entidades.
int main ()
Esta línea se corresponde con el principio
de la definición de la función principal. La función principal es el punto
por donde todos los programas en C + + comienzan su ejecución,
independientemente de su ubicación dentro del código fuente.
cout << "Hello World!";
Esta línea es una declaración de C + +. Una
declaración es una expresión simple o compuesto que en realidad puede producir
algún efecto. De hecho, esta declaración lleva a cabo la única acción que
genera un efecto visible en nuestro primer programa. ( cout es el nombre
de la secuencia de salida estándar en C + +)
cout se declara en el archivo iostream
estándar dentro del espacio de nombres std, así que por eso teníamos que
incluir ese archivo específico y declarar que íbamos a utilizar este espacio de
nombres específico a principios de nuestro código.
Tenga en cuenta que la declaración termina
con un punto y coma (;). Este carácter se utiliza para marcar el final de
la instrucción y de hecho debe ser incluida al final de todas las declaraciones
de expresión en todos los programas en C + +
return 0;
La sentencia return hace que la función
principal a fin. retorno puede ser seguido por un código de retorno (en
nuestro ejemplo es seguido por el código de retorno con un valor de cero). Un
código de retorno de 0 para la función principal es interpretado en general
como el programa funcionó como se esperaba sin ningún error durante su
ejecución. Esta es la forma más habitual de terminar un programa de consola C +
+.
No hay comentarios.:
Publicar un comentario