PROGRAMA HASKELL
Haskell es un lenguaje de programación puramente funcional de propósito general y fuertemente tipado. Su nombre proviene del lógico Haskell Curry.
En los años 1980 se constituyó un comité cuyo objetivo era crear un lenguaje funcional que reuniera las características de los múltiples lenguajes funcionales de la época, el más notable Miranda, y resolviera la confusión creada por la proliferación de los mismos. El lenguaje evoluciona rápidamente con y como los representantes actuales del estándar de facto. El último estándar semi-oficial es Haskell 98, con la intención de especificar una versión mínima y compatible del lenguaje como base para futuras extensiones y para su enseñanza.
Las características más interesantes de Haskell incluyen el soporte para tipos de datos y funciones recursivas, listas, tuplas, guardas y calce de patrones. La combinación de las mismas pueden resultar en algunas funciones casi triviales cuya versión en lenguajes imperativos pueden llegar a resultar extremadamente tediosas de programar. Haskell es, desde 2002, uno de los lenguajes funcionales sobre los que más se ha investigado.
Historia
A partir de la publicación de Miranda, en 1985, los lenguajes funcionales proliferaron. En 1987, existían compitiendo entre éllos más de una docena de lenguajes de programación puros funcionales no estrictos. Durante la conferencia sobre Lenguajes de Programación Funcional y Arquitecturas de Ordenador (FPCA '87) en Portland, Oregón, se mantuvo un meeting durante el cual se alcanzó un fuerte consenso entre sus participantes para formar un comité que definiese un estándar abierto para tales lenguajes. Esto se hizo con el propósito expreso de consolidar los lenguajes existentes en uno único que sirviera como base para la investigación futura en diseño de lenguajes.1 La primera versión de Haskell ("Haskell 1.0") se definió en 1990.2 Los esfuerzos del comité resultaron en una serie de definiciones del lenguaje, que culminaron a finales de 1997 en Haskell 98, que se intentó fuera una versión del lenguaje mínima, estable y portable, junto con una biblioteca estándar asociada para la enseñanza, y como base de futuras extensiones. El comité expresamente aprobó la creación de extensiones y variantes de Haskell 98 mediante la adición e incorporación de características experimentales.
En enero de 1999, el estándar del lenguaje Haskell 98 se publicó en "The Haskell 98 Report". En enero de 2003, se publicó una versión revisada en "Haskell 98 Language and Libraries: The Revised Report".3 El lenguaje continúa evolucionando rápidamente, con las implementaciones de Hugs y de GHC (véase más adelante), que representan el actual estándar de facto. A principios del 2006 comenzó el proceso de definición de un sucesor del estándar de Haskell 98, llamado informalmente Haskell′ ("Haskell Prime").4 Este proceso intenta producir una revisión menor de Haskell 98.5
Tipos simples predefinidos a haskell:
El tipo Bool :
Los valores con este tipo representan expresiones lógicas cuyo resultado puede ser True o False.
Funciones y operadores :
• (&&) :: Bool -> Bool -> Bool. Conjunción lógica.
• (
) :: Bool -> Bool -> Bool. Disyunción lógica.
• not :: Bool -> Bool. Negación lógica.
• otherwise :: Bool. Función constante que devuelve el valor True.
El tipo Int :
Los valores de este tipo son números enteros de precisión limitada que cubren al menos el intervalo [-2^29, 2^29 - 1] ([minBound, maxBound]).
El tipo Integer :
Los valores de este tipo son números enteros de precisión ilimitada que tienen las mismas funciones y operadores del tipo Int
El tipo Float :
Los valores de este tipo son números reales. ( 2010, 23.4 , 5.7 )
Funciones y operadores :
• (+), (-), (*), (/), (^):: Float -> Float -> Float. Suma, resta, producto, división real y potencia de exponente entero.
• abs, signum, negate :: Int -> Int. Valor absoluto, signo y negación.
• (**) :: Float -> Float. Potencia de exponente real
El tipo Double :
Los valores de este tipo son números reales, de mayor rango y con aproximaciones más precisas que los de tipo Float.
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 definición
Antes de utilizar esta función en hugs debemos utilizar IMPORT CHAR antes de nuestro algoritmo
Tuplas :
Los elementos que forman una tupla pueden ser de distintos tipos.
Por ejemplo: ('a',True,3)
Listas :
Los valores de este tipo son una colección de elementos del mismo tipo. Existen dos constructoras para listas:
• [Elementos_separados_por_comas] , por ejemplo: [1,2,3,4]
• (primer_elemento:resto_de_la_lista) , por ejemplo: (1:(2:(3:(4:[]))))
MANUAL DEL LENGUAJE EN LINEA DE DISTRIBUCION GRATUITA LEGAL
Haskell te ofrece:
o Un incremento substancial de productividad para el programador (Ericsson alcanzó un factor de mejoría entre 9 y 25 usando Erlang, un lenguaje de programación funcional similar a Haskell, en uno de sus experimentos en programas de telefonía).
o Código más corto, claro y fácil de mantener.
o Menos errores, mayor confiabilidad.
o Menor diferencia semántica; entre el programador y el lenguaje.
o Desarrollo de programas en menor tiempo.
Haskell es un lenguaje de un amplio espectro, conveniente para una gran variedad de aplicaciones. Específicamente para programas que necesitan ser fáciles de modificar y de mantener
UN PROGRAMA EJEMPLO ESCRITO EN ELLO
--Función recursiva para calcular el factorial de un número
factorial :: Integer -> Integer
factorial n = if n==0 then
1
else
n * factorial (n - 1)
--Sumar elementos de una lista
sumar :: [Int] -> Int
sumar [] = 0
sumar (x:xs) = x+sumar(xs)
--Función recursiva para calcular el factorial de un número usando pseudónimos
factorial :: Integer -> Integer
factorial 0 = 1
factorial m@(n + 1) = m * factorial n
--Función para calcular las raíces de una ecuación de segundo grado a partir de sus coeficientes
raíces :: Float -> Float -> Float -> (Float, Float)
raíces a b c
disc >= 0 = ((-b + raizDisc) / denom,
(-b - raizDisc) / denom)
otherwise = error "La ecuación tiene raíces complejas"
where
disc = b*b - 4*a*c
raizDisc = sqrt disc
denom = 2*a