Está en la página 1de 4

Programacin Lgica y Funcional

Actividad de Aula 1 - Teora


Introduccin a la Programacin Funcional
Roberto Ariel Villalba

2017
Responder los siguientes tems:

1) Identifique las principales caractersticas del paradigma de programacin funcional.


Algunas de las principales caractersticas de la programacin funcional son:
La transparencia referencial permite que el valor que devuelve una funcin est
nicamente determinado por el valor de sus argumentos consiguiendo que una misma
expresin tenga siempre el mismo valor. Permite aumentar su flexibilidad y realizar
unidades de software genricas mediante la utilizacin de tipos de datos genricos, que es
una forma de implementar el polimorfismo en el paradigma funcional.
La evaluacin perezosa o diferida es una caracterstica de gran potencia, por la que se
evala del programa solamente tanto como se requiere para conseguir la respuesta. En la
invocacin de funciones con sus correspondientes argumentos, la evaluacin de las
expresiones intervinientes se posterga hasta el momento en que realmente sean
utilizadas.
La recursividad es una herramienta para la formulacin de algunas soluciones,
principalmente en las de ms bajo nivel, basada en el principio matemtico de induccin,
que se ve expresada en el uso de tipos de datos recursivos, como las listas, y funciones
recursivas que las operan.
Una caracterstica fundamental es la posibilidad de tratar a las funciones como datos
mediante la definicin de funciones de orden superior, que permiten un gran nivel de
abstraccin y genericidad en las soluciones. el uso correcto de las funciones de orden
superior puede mejorar substancialmente la estructura y la modularidad de muchos
programas.
Entre las estructuras de datos que utiliza se destacan las listas, como tipo de dato
compuesto que, junto con las tuplas, permite organizar conjuntos de valores.
En este modelo es ms sencillo demostrar la correccin de los programas ya que se
cumplen propiedades matemticas tradicionales como la propiedad conmutativa,
asociativa, etc.
Los lenguajes funcionales relevan al programa de la compleja tarea de gestin de
memoria. El almacenamiento se asigna y se inicializa implcitamente, y es recuperado
automticamente por un recolector de la basura. La tecnologa para la asignacin de
memoria y de la recoleccin de la basura estn actualmente bien desarrollados por lo que
su costo de funcionamiento es leve.

2) Describa la principal base terica del paradigma funcional.


Los orgenes tericos del modelo funcional se remontan a la dcada del 30, en los cuales
Church propuso un nuevo modelo de estudio de la computabilidad mediante el clculo lambda.
Este modelo permita trabajar con funciones como objetos de primera clase. En esa misma poca,
Shnfinkel y Curry construan los fundamentos de la lgica combinatoria que tendr gran
importancia para la implementacin de los lenguajes funcionales. Hacia 1950, John McCarthy
dise el lenguaje LISP (List Processing) que utilizaba las listas como tipo bsico y admita
funciones de orden superior. Sin embargo, para que el lenguaje fuese prctico, fue necesario

1
incluir caractersticas propias de los lenguajes imperativos como la asignacin destructiva y los
efectos laterales que lo alejaron del paradigma funcional. A principios de la dcada de los setenta
aparecieron los primeros sntomas de lo que se ha denominado crisis del software (los productos
no son fiables, alta tasa de errores o bugs, dificultad de demostrar que el sistema cumple los
requisitos especificados). Una posible solucin fue proponer un modelo de computacin diferente
al modelo imperativo tradicional que se basa en la idea de que los problemas detectados son
inherentes al modelo computacional utilizado y su solucin no se encontrar a menos que se
utilice un modelo diferente. As nace la programacin funcional o aplicativa, cuyo objetivo es
describir los problemas mediante funciones matemticas puras sin efectos laterales. En 1978 J.
Backus trabaj mostrando las ventajas del modelo funcional por encima de las bases de la
programacin imperativa tradicional y dise el lenguaje funcional FP (Functional Programming)
con la filosofa de definir nuevas funciones combinando otras funciones.
A mediados de los 70, Gordon trabajaba en un sistema generador de demostraciones
denominado LCF que inclua el lenguaje de programacin ML (Metalenguaje). Aunque el sistema
LCF era interesante, se observ que el lenguaje ML poda utilizarse como un lenguaje de propsito
general eficiente. ML optaba por una solucin de compromiso entre el modelo funcional y el
imperativo ya que, aunque contiene asignaciones destructivas y Entrada/Salida con efectos
laterales, fomenta un estilo de programacin claramente funcional. Esa solucin permite que los
sistemas ML compitan en eficiencia con los lenguajes imperativos. A mediados de los ochenta se
realiz un esfuerzo de estandarizacin que culmin con la definicin de SML (Stndar ML). Este
lenguaje es fuertemente tipado con resolucin esttica de tipos, definicin de funciones
polimrficas y tipos abstractos. Al mismo tiempo que se desarrollaban FP y ML, David Turner
(primero en la Universidad de St. Andrews y posteriormente en la Universidad de Kent) trabajaba
en un nuevo estilo de lenguajes funcionales con evaluacin perezosa y definicin de funciones
mediante encaje de patrones. El desarrollo de los lenguajes SASL (St. Andrews Static Language),
KRC (Kent Recursive Calculator) y Miranda tena como objetivo facilitar la tarea del programador
incorporando facilidades sintcticas como las guardas, el encaje de patrones, las listas por
comprensin y las secciones. A comienzos de los ochenta surgi una gran cantidad de lenguajes
funcionales debido a los avances en las tcnicas de implementacin. Esta gran cantidad de
lenguajes perjudicaba el desarrollo del paradigma funcional. En 1987, se decidi formar un comit
internacional que disease un nuevo lenguaje puramente funcional de propsito general
denominado Haskell. Sin embargo, se observa que a pesar de los aos transcurridos, los lenguajes
de programacin funcional han tenido xito a la hora de reemplazar a los lenguajes
convencionales en ciertas reas de aplicacin, pero no han logrado ubicarse masivamente en
aplicaciones de uso general.

3) En qu consiste el modelo de sustitucin y como se aplica?


Para comprender mejor primero debemos definir que es un modelo computacional, el cual se
puede definir como un formalismo (conjunto de reglas) que definen el funcionamiento de un
programa, en los lenguajes funcionales basados en la evaluacin de expresiones, el modelo
computacional define cul va a ser el resultado de evaluar una determinada expresin. Mientras
que un modelo de sustitucin se basa en una versin simplificada de la regla de reduccin del
clculo lambda.

2
Reglas para evaluar una expresin e de Scheme:
1. Si e es un valor primitivo, devolver ese mismo valor.
2. Si e es una variable, devolver su valor asociado.
3. Si e es una expresin del tipo (f arg1 argn), donde f el nombre de un procedimiento
primitivo (+, -, ), evaluar arg1 argn y aplicar el procedimiento al resultado.
4. Si e es una expresin del tipo (f arg1 argn), donde f es el nombre de un procedimiento
compuesto (definido con un define), sustituir f por su cuerpo, reemplazando cada
parmetro formal del procedimiento por el correspondiente argumento evaluado.
Evaluar la expresin resultante.

4) Compare evaluacin normal con evaluacin de aplicacin


En el modelo de evaluacin de los lenguajes funcionales, el usuario introduce una expresin
que es evaluada por el sistema. La evaluacin consiste en buscar subexpresiones dentro de la
expresin que puedan transformarse utilizando las funciones predefinidas y las funciones
definidas por el usuario. Cuando no es posible realizar ms transformaciones se dice que se ha
alcanzado la forma normal. Existen dos estrategias fundamentales de evaluacin: evaluacin
aplicativa y evaluacin normal. En el de aplicacin se evala primero todos los procedimientos y
argumentos antes de ejecutar la llamada a la funcin, mientras que en la normal se expande
completamente los procedimientos hasta que todo est expresado mediante operaciones
primitivas y autoevaluaciones, y por ltimo se evala la expresin. Pero, con uno u otro, podemos
encontrar la solucin de la expresin.
Una consideracin muy importante es que en programacin funcional, una funcin siempre
devuelve el mismo valor cuando es llamada con los mismos argumentos, ya sea que utilicemos el
orden normal y el orden aplicativo siempre devolvern el mismo resultado. Sin embargo, esto
puede no suceder cuando estamos en un lenguaje no funcional.

5) Cul es la importancia de la funcin en la programacin funcional?


Las funciones juegan un papel ms que importante en la programacin funcional y para
demostrarlo se puede comenzar definiendo los conceptos y la relacin entre estos trminos. A las
funciones se las puede considerar como expresiones que establecen una relacin de
correspondencia o asociacin entre miembros de un conjunto (el dominio) y miembros de otro
conjunto (la imagen), en un determinado sentido. De esta manera, para cada elemento del
conjunto dominio corresponde un determinado elemento del conjunto imagen, y no existen
elementos del conjunto dominio que no tengan su correspondiente imagen. Cuando la funcin es
invocada, los argumentos recibidos se unifican con las expresiones codificadas y se retorna el
resultado de su evaluacin. En la programacin funcional, el resultado de un clculo es la entrada
del siguiente, y as sucesivamente hasta que una composicin produce el resultado deseado,
donde un programa es un conjunto de funciones que cooperan entre ellas para el logro de un
objetivo comn. Toda expresin es evaluada mediante un proceso de reduccin, que bsicamente
consiste en combinar un mecanismo de unificacin y sustitucin. En este proceso se utilizan las
definiciones de funcin hasta obtener un valor no reducible. El paradigma funcional est basado
en conceptos que vienen de la matemtica, entonces algunas conceptos y temas a hemos visto en
Anlisis I, Anlisis II, lgebra I y lgebra II.

También podría gustarte