Anda di halaman 1dari 5

Haskell

Ms versiones paralelas y distribuidas de Haskell llamadas Distributed Haskell (anteriormente Gon) y


Eden

Haskell (pronunciado /hskl/)[1] es un lenguaje de


programacin estandarizado multi-propsito puramente
funcional con semnticas no estrictas y fuerte tipicacin esttica. Su nombre se debe al lgico estadounidense Haskell Curry. En Haskell, una funcin es un ciudadano de primera clase del lenguaje de programacin.
Como lenguaje de programacin funcional, el constructor de controles primario es la funcin. El lenguaje tiene
sus orgenes en las observaciones de Haskell Curry y sus
descendientes intelectuales.

Una versin con ejecucin especulativa: Eager Haskell


Varias versiones orientadas a objetos: Haskell++,
O'Haskell y Mondrian.
Una versin educativa llamada Gofer desarrollada
por Mark Jones que fue suplantada por Hugs (ver
abajo).

En los aos 1980 se constituy un comit cuyo objetivo


era crear un lenguaje funcional que reuniera las caractersticas de los mltiples lenguajes funcionales de la poca,
el ms notable Miranda, y resolviera la confusin creada Para informacin ms detallada, referirse al sitio ocial o
por la proliferacin de los mismos.
a los enlaces al nal de este artculo.
El lenguaje evoluciona rpidamente y (ver ms abajo) como los representantes actuales del estndar de facto. El
ltimo estndar semi-ocial es Haskell 2010, cuyas diferencias respecto al anterior estndar Haskell 98 son:

1 Historia
A partir de la publicacin de Miranda, en 1985, los lenguajes funcionales proliferaron. En 1987, existan compitiendo entre ellos ms de una docena de lenguajes de
programacin puros funcionales no estrictos. Durante la
conferencia sobre Lenguajes de Programacin Funcional
y Arquitecturas de Ordenador (FPCA '87) en Portland,
Oregn, se mantuvo un encuentro durante el cual se alcanz un fuerte consenso entre sus participantes para formar un comit que deniese un estndar abierto para tales lenguajes. Esto se hizo con el propsito expreso de
consolidar los lenguajes existentes en uno nico que sirviera como base para la investigacin futura en diseo
de lenguajes.[2] La primera versin de Haskell (Haskell
1.0) se deni en 1990.[3] Los esfuerzos del comit resultaron en una serie de deniciones del lenguaje, que culminaron a nales de 1997 en Haskell 98, que se intent
fuera una versin del lenguaje mnima, estable y portable, junto con una biblioteca estndar asociada para la
enseanza, y como base de futuras extensiones. El comit
expresamente aprob la creacin de extensiones y variantes de Haskell 98 mediante la adicin e incorporacin de
caractersticas experimentales.

Nuevas caractersticas del lenguaje:


Interfaz de funciones forneas (FFI), que permite
usar cdigo C en un programa Haskell y cdigo Haskell en un programa C. Un ejemplo explicativo se
puede encontrar aqu
Nombres jerrquicos para los mdulos, por ejemplo
Data.Bool.
Guardianes con patrones.
Caractersticas eliminadas del lenguaje:
Sintaxis de patrones (n+k). Con lo cual, la siguiente denicin de la funcin factorial no es vlida en
Haskell 2010 y posteriores: fact (n+1) = (n+1) * fact
n.
Las caractersticas ms interesantes de Haskell incluyen
el soporte para tipos de datos y funciones recursivas, listas, tuplas, guardas y encaje de patrones. La combinacin
de las mismas pueden resultar en algunas funciones casi triviales cuya versin en lenguajes imperativos pueden
llegar a resultar extremadamente tediosas de programar.
Haskell es, desde 2002, uno de los lenguajes funcionales
sobre los que ms se ha investigado. Se han desarrollado
muchas variantes:

En enero de 1999, el estndar del lenguaje Haskell 98 se


public en The Haskell 98 Report. En enero de 2003,
se public una versin revisada en Haskell 98 Language and Libraries: The Revised Report.[4] El lenguaje
contina evolucionando rpidamente, con las implementaciones de Hugs y de GHC (vase ms adelante), que
Versiones paralelas del MIT y Glasgow, ambas de- representan el actual estndar de facto. A principios del
nominadas Parallel Haskell.
2006 comenz el proceso de denicin de un sucesor
1

4 IMPLEMENTACIONES

del estndar de Haskell 98, llamado informalmente Has- 3.5 El tipo Double
kell (Haskell Prime).[5] Este proceso intenta producir
una revisin menor de Haskell 98.[6] En 2010 se lanza Los valores de este tipo son nmeros reales, de mayor
rango y con aproximaciones ms precisas que los de tipo
Haskell 2010.
Float.

Introduccin a Haskell

Tipos simples predenidos

3.1

El tipo Bool

Los valores con este tipo representan expresiones lgicas


cuyo resultado puede ser True o False.

3.6 El tipo Char


Los valores de este tipo son caracteres que se encuentran
en una masa de alta complejidad de en una suma de caracteres dados con su alta denicin
Antes de utilizar esta funcin en hugs debemos utilizar
IMPORT CHAR antes de nuestro algoritmo

3.7 Tuplas
3.1.1

Funciones y operadores

(&&) :: Bool -> Bool -> Bool. Conjuncin lgica.

Los elementos que forman una tupla pueden ser del mismo o de distintos tipos. Es un conjunto de componentes
relacionados. Por ejemplo: ('a', True,3)

(||) :: Bool -> Bool -> Bool. Disyuncin lgica.


not :: Bool -> Bool. Negacin lgica.

3.8 Listas

otherwise :: Bool. Funcin constante que devuelve el Los valores de este tipo son una coleccin de elementos
del mismo tipo. Existen dos constructores para listas:
valor True.

3.2

El tipo Int

Los valores de este tipo son nmeros enteros de precisin


limitada que cubren al menos el intervalo [2^29, 2^29
- 1] ([minBound, maxBound]).

[Elementos_separados_por_comas], por ejemplo:


[1,2,3,4]
(primer_elemento:resto_de_la_lista), por ejemplo:
(1:(2:(3:(4:[]))))

4 Implementaciones
3.3

El tipo Integer

Todas las siguientes implementaciones cumplen en su toLos valores de este tipo son nmeros enteros de precisin talidad, o casi en su totalidad, con los estndares de Hasilimitada que tienen las mismas funciones y operadores kell 98 y son distribuidas bajo licencias Open Source. No
del tipo Int.
se conocen implementaciones comerciales del lenguaje.

3.4

El tipo Float

Los valores de este tipo son nmeros reales. ( 2010, 23.4,


5.7 )
3.4.1

Funciones y operadores

(+), (-), (*), (/), (^) :: Float -> Float -> Float. Suma,
resta, producto, divisin real y potencia de exponente entero.
abs, signum, negate :: Int -> Int. Valor absoluto,
signo y negacin.
(**) :: Float -> Float. Potencia de exponente real

Hugs () es un intrprete. Ofrece una compilacin


rpida de los programas y un tiempo razonable de
ejecucin. Tambin viene con una librera grca
muy simple, lo que lo hace adecuado para quienes
lo estn aprendiendo. Sin embargo no es una implementacin a despreciar, es una de las ms livianas y
compatibles.
GHC (): Glasgow Haskell Compiler compila a cdigo nativo en una variedad de arquitecturas y puede tambin compilar a C. Es, probablemente, uno
de los compiladores ms populares e incluso tiene
unas cuantas libreras (por ejemplo OpenGL) que,
aunque muy tiles, slo funcionan bajo GHC.
nhc98 () es otro compilador con un mejor tiempo de
ejecucin que Hugs. Esta implementacin se enfoc

6.2

The Summer of Haskell

a minimizar la utilizacin de la memoria convirtin- El propsito del evento es discutir la experiencia de los
dola en una buena opcin para arquitecturas lentas programadores con Haskell, y el futuro desarrollo del leno antiguas.
guaje. El alcance del simposio incluye todos los aspectos
del diseo, la semntica, la teora, la aplicacin, la ejecu HBC () es otro compilador a cdigo nativo de Has- cin, y la enseanza de Haskell.
kell. Si bien no ha sido actualizado en el ltimo tiemAntes de 2008, el evento era conocido como "The Haspo sigue siendo bastante til.
kell Workshop". El cambio de nombre reeja el aumento
Helium () es un nuevo dialecto de Haskell. Se centr constante de la inuencia del evento en la comunidad en
en ser muy fcil de aprender; por ello, no incluye general, as como un creciente nmero de presentaciones
soporte para todo el estndar de Haskell, haciendo de alta calidad que hacen el proceso de aceptacin muy
competitivo.
que no sea totalmente compatible.

Entornos de desarrollo

6.2 The Summer of Haskell

Existen varios IDEs (Integrated Development Environment, o en espaol, entornos de desarrollo integrado) y/o
plugins que se pueden utilizar para desarrollar aplicaciones en Haskell. La mayora son open source, pero tambin
existen de ndole comercial.

"The Summer of Haskell" es un evento organizado por


haskell.org para llegar a los estudiantes y animarles a contribuir a la comunidad Haskell con la ayuda de mentores
experimentados. Este programa est abierto a estudiantes
universitarios, mayores de 18 aos, en la mayora de los
pases.

5.1

7 Ejemplos

Open Source

IntelliJ plugin for Haskell


EclipseFP plugin for Eclipse IDE
Colorer plugin for Eclipse IDE
Leksah

Funcin recursiva para calcular el factorial de un nmero


natural:
--Funcin recursiva que calcula el factorial de un nmero
natural factorial :: Integer -> Integer factorial n | n < 0
= error no existe el factorial para enteros negativos | n
== 0 = 1 | otherwise = n * factorial (n-1)

KDevelop
Vim
Emacs
Atom

5.2

Sublime-Haskell

6.1

--Funcin para calcular el factorial de un entero usando


la funcin product del mdulo Data.List factorial ::
Integer -> Integer factorial n | n < 0 = error no existe el
factorial para enteros negativos | n == 0 = 1 | otherwise
= product [1..n]

Comerciales

Haskell for Mac

Otra versin de la funcin para calcular el factorial de un


natural usando la funcin product del mdulo Data.List:

Comunidad
The Haskell Symposium

The Haskell Symposium es un simposio anual organizado por la International Conference on Functional Programming (ICFP). El simposio est patrocinado por la
Association for Computing Machinery (ACM), bajo los
auspicios del ACM Special Interest Group on programming
languages (SIGPLAN).

Funcin sumatorio de los elementos de una lista de enteros


--Sumar elementos de una lista sumar :: [Int] -> Int
sumar [] = 0 sumar (x:xs) = x+sumar(xs)
Funcin para calcula las races de una ecuacin de segundo grado a partir de sus coecientes
--Funcin para calcular las races de una ecuacin de
segundo grado a partir de sus coecientes races :: Float
-> Float -> Float -> (Float, Float) races a b c | disc >=
0 = ((-b + raizDisc) / denom, (-b - raizDisc) / denom) |
otherwise = error La ecuacin tiene races complejas
where disc = b*b - 4*a*c raizDisc = sqrt disc denom =
2*a

11 ENLACES EXTERNOS

Funcin que aproxima el nmero e

Haskell Pgina ocial de Haskell

--Funcin
para
calcular
el
valor
de
e
(2.71828182845905) euler :: Double -> Double euler 0.0 = 1.0 euler n = 1.0 / product [1..n] + euler (n
- 1.0) --Algoritmo de ordenacin quicksort qs::Ord
a=>[a]->[a] qs [] = [] qs (p:xs) = qs [x|x<-xs,x<p] ++ [p]
++ qs [x|x<-xs,x>=p]

Try Haskell Prueba Haskell online

Funcin para calcular el mximo comn divisor de dos


nmeros enteros mediante el algoritmo de Euclides
mcd::Int->Int->Int mcd x 0 = x mcd x y = mcd y (mod x y)

A Gentle Introduction to Haskell 98 (pdf format)


Una simple introduccin a Haskell 98
The Evolution of a Haskell Programmer Una forma
cmica de ver los distintos estilos de programacin
en Haskell
Online Bibliography of Haskell Research Bibliografa de investigaciones en Haskell
Haskell (programming language)

Funcin que realizar la criba de Eratstenes (de una lista


dada deja solo los nmeros primos)

Learn You a Haskell for Great Good

eratostenes :: [Int] -> [Int] eratostenes [] = [] eratostenes Espaol:


(x:xs) | not (null xs) && x^2 > last xs = (x:xs) | otherwise
= x: eratostenes [y | y <- xs, y `mod` x /= 0]
Introduccin a Haskell
Lenguaje de Programacin Funcional Haskell Haskell Bsico

Vase tambin
QuickCheck

Notas y referencias

[1] Chevalier, Tim (28 de enero de 2008), anybody


can tell me the pronuncation of haskell"?, lista de
correo Haskell-cafe, http://www.haskell.org/pipermail/
haskell-cafe/2008-January/038756.html, consultado el
12 de marzo de 2011.
[2] Preface. Haskell 98 Language and Libraries: The Revised Report. December de 2002.
[3] The History of Haskell. Archivado desde el original el
23 de noviembre de 2015.
[4] Simon Peyton Jones (December de 2002). Haskell 98
Language and Libraries: The Revised Report.
[5] Future development of Haskell.
[6] Welcome to Haskell'. The Haskell' Wiki.

10

Bibliografa

Ruiz, Blas; Gutirrez, Francisco; Guerrero, Pablo;


y Gallardo, Jos. Razonando con Haskell. Un curso
sobre programacin funcional. Thomson.

11
Ingls:

Enlaces externos

Una Introduccin Agradable a Haskell Versin en


espaol del libro A Gentle Introduction to Haskell.
Aprende Haskell por el bien de todos! Traduccin
de la obra Learn you a Haskell for great good.
Haskell Bsico Curso de Haskell
Implementaciones:
Hugs Haskell Users Gofer System
GHC The Glasgow Haskell Compiler
Helium, Helium

12
12.1

Origen del texto y las imgenes, colaboradores y licencias


Texto

Haskell Fuente: https://es.wikipedia.org/wiki/Haskell?oldid=92480016 Colaboradores: Moriel, DefLog, Janus~eswiki, Dodo, Triku, Elwikipedista, JavierCantero, MatiasBellone, Emijrp, Rembiapo pohyiete (bot), Orgullobot~eswiki, RobotQuistnix, Chobot, Caiserbot, Yrbot, FlaBot, Vitamine, BOTijo, YurikBot, GermanX, KnightRider, Eskimbot, Gtz, CaStarCo, Chlewbot, Tomatejc, Rbonvall, Tamorlan,
CEM-bot, SanIctcola, Toranks, Alexav8, Jvillais, Thijs!bot, Makam~eswiki, JoaquinFerrero, Diablo Cris, JAnDbot, Wybot, Nueva era,
Muro de Aguas, TXiKiBoT, Elisardojm, Rei-bot, Jcabot, VolkovBot, Matdrodes, Muro Bot, El Pantera, SieBot, Fpina7, Loveless, Wilson
Fisk, Grace Pahuasi, Taty2007, AVBOT, HavokCR, Luckas-bot, FariBOT, Simeon87, Xqbot, D'ohBot, Amarco90, Ripchip Bot, EmausBot, Guarddon, Grillitus, WikitanvirBot, Mjbmrbot, Antonorsi, MerlIwBot, JABO, KLBot2, Federicobond, Antimaterial, Syrusakbary,
Elvisor, MahdiBot, Pablo Darko, BenjaBot, Freinn, Tincho morales01, Juan-Miguel Gracia y Annimos: 59

12.2

Imgenes

Archivo:Haskell-Logo.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/1/1c/Haskell-Logo.svg Licencia: Public domain


Colaboradores: Thompson-Wheeler logo on the haskell wiki Artista original: Thought up by Darrin Thompson and produced by Je Wheeler

12.3

Licencia del contenido

Creative Commons Attribution-Share Alike 3.0

Anda mungkin juga menyukai