Introduccion a Haskell

Definicion:

Haskell es un lenguaje de programación puramente funcional de propósito general y fuertemente tipado.

Wikipedia

Tipos de datos:

Bool: Los valores con este tipo representan expresiones lógicas cuyo resultado puede ser True o False.

Funciones y operadores Booleanos

  • (&&) :: 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.

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]).

operadores:

  • (+) suma
  • (-) resta
  • (*) multiplicacion
  • (/) division
  • (^) potencia

Integer: Los valores de este tipo son números enteros de precisión ilimitada que tienen las mismas funciones y operadores del tipo Int.

Float: Los valores de este tipo son números reales.

Double:Los valores de este tipo son números reales, de mayor rango y con aproximaciones más precisas que los de tipo Float.

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.

Tuplas: Es una agrupacion de elementos los cuales pueden ser de distintos tipos.
Por ejemplo: (‘a’,True,3)

Listas: similar a las tuplas solo que  los valores de este tipo son una colección de elementos del mismo tipo. Existen dos constructoras para listas:
[forma explicita] por ejemplo: [1,2,3,4]
[forma implicita] por ejemplo: [1..4]

Ejemplos:

Haskell al ser un lenguaje completamente funcional se pueden hacer algoritmos a nivel de abstracción mucho mayor, aunque debemos dejar en claro que el echo de ser un lenguaje tan de alto nivel se pierde la potencia, sin embargo veamos un ejemplo del nivel de abstracción de dicho lenguaje.

Quick-Sort:El ordenamiento rápido (quicksort en inglés) es un algoritmo basado en la técnica de divide y vencerás, que permite, en promedio, ordenar n elementos en un tiempo proporcional a n log n.

imaginemos la siguiente lista [20,55,23,42,85,6,5,42,10]



Figura muestra como funciona el algoritmo QuickSort

Figura muestra como funciona el algoritmo QuickSort

Este algoritmo que en lenguajes como C es algo tedioso en realidad es muy simple se basa de detectar un pivote y mandar al lado izquierdo de la lista los elementos menores a el y del lado derecho los elementos mayores.
Para Ordenarla el qs (Quick-Sort) haria los siguientes pasos:

  1. Toma como pivote 20 y ordena del lado izquierdo los menores y del derecho los mayores quedando la lista [6,5,10] (20) [55,23,42,85,42].
  2. Toma como pivote el 6 quedando   [5](6) (10,20)[55,23,85,42].
  3. Toma como pivote el 5 quedando  [](5)[](6,10,20)[23,42](55)[85].
  4. Toma como pivote el 55 quedando  (5,6,10,20)[23,42](55)[85].
  5. Toma como pivote el 23 quedando  (5,6,10,20)[](23)[42,55,85].
  6. Toma como pivote el 42 quedando  (5,6,10,20,23)[](42)[55,85].
  7. por ultimo la lista queda (5,6,10,20,23,42,55,85).

Codigo Haskell :