PDF de programación - Unidad V - Haskell un lenguaje de programación funcional

Imágen de pdf Unidad V - Haskell un lenguaje de programación funcional

Unidad V - Haskell un lenguaje de programación funcionalgráfica de visualizaciones

Actualizado el 4 de Mayo del 2019 (Publicado el 15 de Abril del 2019)
1.340 visualizaciones desde el 15 de Abril del 2019
194,2 KB
22 paginas
Creado hace 13a (17/03/2011)
Universidad Tecnológica Nacional
Facultad Regional Córdoba

Ingeniería en Sistemas de Información

Cátedra de Paradigmas de Programación - 2011



Elaborado por :

Paradigmas de programación

Haskell un lenguaje de programación funcional



- Castillo, Julio Javier
Analista en Computación - Famaf
Depto. Ingeniería en Sistemas de Información – UTN - FRC



Paradigmas de Programación

1


Universidad Tecnológica Nacional
Facultad Regional Córdoba

Ingeniería en Sistemas de Información



Cátedra de Paradigmas de Programación - 2011

INDICE


Un poco de Historia…………………………………………………………………………...… 3
El lenguaje Haskell ……………………………………………………………………………... 5
A.INTRODUCCIÓN…………………………………………………………………………...………… 5
B.¿QUE ES HASKELL?............................................................................................................................. 5
C.¿POR QUE USAR HASKELL?.............................................................................................................. 5
D.DESARROLLO FUTURO DE HASKELL……………………………………………………………. 6
E.HASKELL EN ACCION………………………………………………………………………………. 6
1-Tipos………………………………………………………………………………..………… 6
1.1 Información de tipo……………………………………………………………..…………. 7
1.2 Tipos predefinidos…………………………………………………………………………. 7
1.3 Funciones………………………………………………………………………...…………. 7
2.-El entorno de Haskell - HUGS…………………………………………………………….. 7
3. Funciones……………………………………………………………………………………. 9
4. Listas…………………………………………………………………………………………. 9
5.Tuplas ………………………………………………………………………………………… 10
6. Ecuaciones con guardas…………………………………………………………………….. 10
7.Definiciones locales……………………………………………………………………….…..10
8. Expresiones lambda……………………………………………………………………..……11
9. Disposición del código……………………………………………………………................. 11
10.-Tipos definidos por el usuario…………………………………………………………….. 12
11. Tipos Recursivos…………………………………………………………………................ 14
12.-Entrada/Salida…………………………………………………………………..................... 15
13. Sobrecarga y Clases en Haskell………………………………………………..…………. 17
14. Evaluación Perezosa(Lazy) ………………………………………………..…...…………. 19
15. Ejercicios Prácticos ………………………………………………………………………….. 19
Anexo “La enseñanza de Haskell” ..………………………………………………..…...…………….. 21
Bibliografía ……………………………………………………………………………………………… 22



Paradigmas de Programación

2


Universidad Tecnológica Nacional
Facultad Regional Córdoba

Ingeniería en Sistemas de Información

Cátedra de Paradigmas de Programación - 2011


Un poco de Historia :

Los orígenes teóricos del modelo funcional se remontan a los años 30 en los cuales Church propuso un
nuevo modelo de estudio de la computabilidad mediante el cálculo lambda. Este modelo permitía
trabajar con funciones como objetos de primera clase. En esa misma época, Shönfinkel y Curry
construían los fundamentos de la lógica combinatoria que tendrá gran importancia para la
implementación de los lenguajes funcionales.

Hacia 1950, John McCarthy diseñó el lenguaje LISP (List Processing) que utilizaba las listas como
tipo básico y admitía funciones de orden superior. Este lenguaje se ha convertido en uno de los
lenguajes más populares en el campo de la Inteligencia Artificial. Sin embargo, para que el lenguaje
fuese práctico, fue necesario incluir características propias de los lenguajes imperativos como la
asignación destructiva y los efectos laterales que lo alejaron del paradigma funcional. Actualmente ha
surgido una nueva corriente defensora de las características funcionales del lenguaje encabezada por el
dialecto Scheme, que aunque no es puramente funcional, se acerca a la definición original de
McCarthy.


En 1964, Peter Landin diseñó la máquina abstracta SECD para mecanizar la evaluación de
expresiones, definió un subconjunto no trivial de Algol-60 mediante el cálculo lambda e introdujo la
familia de lenguajes ISWIM (If You See What I Mean) con innovaciones sintácticas (operadores
infijos y espaciado) y semánticas importantes.

En 1978 J. Backus (uno de los diseñadores de FORTRAN y ALGOL) consiguió que la comunidad
informática prestara mayor atención a la programación funcional con su artículo “Can Programming
be liberated from the Von Neumann style?” en el que criticaba las bases de la programación
imperativa tradicional mostrando las ventajas del modelo funcional.
Además Backus diseñó el lenguaje funcional FP (Functional Programming) con la filosofía de definir
nuevas funciones combinando otras funciones.

A mediados de los 70, Gordon trabajaba en un sistema generador de demostraciones denominado
LCF que incluía el lenguaje de programación ML (Metalenguaje). Aunque el sistema LCF era
interesante, se observó que el lenguaje ML podía utilizarse como un lenguaje de propósito general
eficiente. ML optaba por una solución 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 programación claramente funcional. Esa solución permite que los sistemas ML compitan en
eficiencia con los lenguajes imperativos.
A mediados de los ochenta se realizó un esfuerzo de estandarización que culminó con la definición de
SML (Stándar ML). Este lenguaje es fuertemente tipado con resolución estática de tipos, definición de
funciones polimórficas y tipos abstractos. Actualmente, los sistemas en SML compiten en eficiencia
con los sistemas en otros lenguajes imperativos.

A comienzos de los ochenta surgieron una gran cantidad de lenguajes funcionales debido
a los avances en las técnicas de implementación. Entre éstos, se podrían destacar Hope, LML, Orwell,
Erlang, FEL, Alfl, etc. 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
3

Paradigmas de Programación




Universidad Tecnológica Nacional
Facultad Regional Córdoba

Ingeniería en Sistemas de Información

Cátedra de Paradigmas de Programación - 2011


comité internacional que diseñase un nuevo lenguaje puramente funcional de propósito general
denominado Haskell.

Con el lenguaje Haskell se pretendía unificar las características más importantes de los lenguajes
funcionales. como las funciones de orden superior, evaluación perezosa, inferencia estática de tipos,
tipos de datos definidos por el usuario, encaje de patrones y listas por comprensión. 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.
El lenguaje incorporaba, además, Entrada/Salida puramente funcional y definición de arrays por
comprensión.
Durante casi 10 años aparecieron varias versiones del lenguaje Haskell, hasta que en 1998 se decidió
proporcionar una versión estable del lenguaje, que se denominó Haskell98, a la vez que se continuaba
la investigación de nuevas características y nuevas extensiones al lenguaje.
A continuación veremos gráficamente la evolucion de los más importantes lenguajes de programación:



Paradigmas de Programación



4


Universidad Tecnológica Nacional
Facultad Regional Córdoba

Ingeniería en Sistemas de Información



Cátedra de Paradigmas de Programación - 2011

El lenguaje Haskell:


A. INTRODUCCIÓN

Haskell es un lenguaje de programación. En particular, es un lenguaje de tipos polimórficos, de
evaluación perezosa, puramente funcional, muy diferente de la mayoría de los otros lenguajes de
programación.
El nombre del lenguaje se debe a Haskell Brooks Curry.
Haskell se basa en el lambda cálculo, por eso se usa lambda como un logo.

B. ¿QUE ES HASKELL?
Haskell es un lenguaje de programación moderno, estándar, no estricto, puramente funcional.
Posee todas las características avanzadas, incluyendo polimorfismo de tipos, evaluación perezosa y
funciones de alto orden. También es un tipo de sistema que soporta una forma sistemática de
sobrecarga y un sistema modular.
Está específicamente diseñado para manejar un ancho rango de aplicaciones, tanto numéricas como
simbólicas. Para este fin, Haskell tiene una sintaxis expresiva y una gran variedad de constructores de
tipos, a parte de los tipos convencionales (enteros, punto flotante y booleanos).
Hay disponible un gran número de implementaciones. Todas son gratis. Los primeros usuarios, tal vez,
deban empezar con Hugs, un intérprete pequeño y portable de Haskell.

C. ¿POR QUE USAR HASKELL?
Escribir en grandes sistemas software para trabajar es difícil y caro. El mantenimiento de estos
sistemas es aún más caro y difícil. Los lenguajes funcionales, como Haskell pueden hacer esto de
manera más barata y más fácil.
Haskell, un lenguaje puramente funcional ofrece:
1. Un incremento substacial de la productividad de los programas.
2. Código más claro y más corto y con un mantenimiento mejor.
3. Una “semántica de huecos” más pequeña entre el programador y el lenguaje.
4. Tiempos de computación más cortos.

Haskell es un lenguaje de amplio espectro, apropiado para una gran variedad de aplicaciones. Es
particularmente apropiado para programas que necesitan ser altamente modificados y mantenidos.
La vi
  • Links de descarga
http://lwp-l.com/pdf15734

Comentarios de: Unidad V - Haskell un lenguaje de programación funcional (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad