Download Lenguajes de programación Haskell Historia: A

Document related concepts

Programación funcional wikipedia , lookup

Búsqueda de patrones wikipedia , lookup

Haskell wikipedia , lookup

Dylan (lenguaje de programación) wikipedia , lookup

Meta Lenguaje wikipedia , lookup

Transcript
Lenguajes de programación
Haskell
Historia:
A comienzos de los ochenta surgieron una gran cantidad de lenguajes funcionales debido a los
avances en las técnicas de implementación, de los cuales se destacan: Hope, LML, Orwell, Erlang,
FEL, Alfl. Esta gran cantidad de lenguajes perjudicaba el desarrollo del paradigma funcional. En
septiembre de 1987, se celebró la conferencia FPCA en la que se decidió formar un comité
internacional que diseñase un nuevo lenguaje puramente funcional de propósito general denominado
Haskell. Al diseñar el lenguaje se observó que no existía un tratamiento sistemático de la sobrecarga
con lo cual se construyó una nueva solución conocida como las clases de tipos.
Características:
o
o
o
o
Funciones de orden superior
Evaluación perezosa
Listas intencionales
Programación literaria
Ventajas:







Brevedad
Facilidad para comprender
Manejo de los tipos de datos
Reutilización de código y polimorfismo
Evaluación perezosa y programas modulares
Abstracciones poderosas y funciones como valores de primera clase
Recolección de basura
Desventajas:

Ineficiencia en la ejecución de los lenguajes funcionales. Debido a su naturaleza dinámica,
estos lenguajes siempre han sido interpretados más que compilados, resultando en una
pérdida sustancial en velocidad de ejecución.
Aplicaciones:
o Fran (Functional Reactive Animations) es una biblioteca para realizar animaciones
usando Haskell.
o Pan es una biblioteca para generar imágenes usando Haskell.
o Haskore es una biblioteca para generar música usando Haskell.
Incluir un pequeño ejemplo (esto es con la finalidad de que revisen su sintaxis).
Ordena los dígitos de un número de manera ascendente:
inv::Integer->Integer->Integer
inv n a |n<10=n
|otherwise=(mod n 10)*(10^(a+1))+ inv (div n 10) (a+1)
may::Integer->Integer
may n |n<10=n
| (mod n 10)<=(mod (div n 10) 10)=may (((div n 100)*10)+(mod n 10))
|otherwise=(may (div n 10))
ord::Integer->String
ord 0=""
ord n |mod n 10==may n=show(mod n 10)++ord (div n 10)
|otherwise=ord (inv n 0)
Lenguajes de Programación
Algol68
ALGOL (ALGOritmic Language), es un lenguaje algorítmico de alto nivel (los cuales se caracterizan
por ser lenguajes con sintaxis desarrollada de acuerdo a la capacidad cognitiva del humano) cuyo
propósito es el permitir una eficiente ejecución de algoritmos en diferentes arquitecturas, fue
diseñado a finales de los años 50’s, con el propósito de aplicarlo a cálculos científicos. Inicialmente
titulado ALGOL 58, posteriormente avanzó en sus revisiones dando como resultado ALGOL68. Este
lenguaje influyó bastante en el desarrollo de varios lenguajes.
ALGOL68 utilizó la notación VWF (“para definir su sintaxis e inglés semi-formal para especificar su
semántica”).
“ALGOL 68 también tenía algunas características que no siempre se han recogido en lenguajes
posteriores, como las declaraciones own (similares a las variables static de C) o las expresiones
switch (muy diferentes a las estructuras de control switch de C”.1
En ALGOL68 aparecen por primera vez conceptos como:





Variables locales a un bloque de código.
Declaración explícita de tipo para todos los identificadores
Estructuras iterativas más generales
Recursividad
Paso de parámetros por valor y por referencia.
ALGOL fue el primer lenguaje descrito con la notación BNF(Backus-Naur Form), notación formal
para definir la sintaxis de un lenguaje.
ALGOL no tenía sentencias de E/S por tener independencia de la arquitectura
Este es un ejemplo de la sintaxis de un programa de ALGOL68:
Mesografía:
1.- http://aprendehaskell.es/content/Empezando.html
2.- http://labsys.frc.utn.edu.ar/ppr-2011/Unidad%20IV%20-%20Paradigma%20funcional/Unidad%20V
%20-%20Paradigma%20Funcional.pdf
3.- http://www.x.edu.uy/inet/ppt%20haskell.pdf
4.- http://program.webcindario.com/codigos/haskell.html
1 http://fransiner.galeon.com/VER.HTML