Translate

viernes, 25 de septiembre de 2020

Elementos básicos en Haskell


Expresiones: En casi todos los lenguajes de programación puedes crear expresiones como:

    (b * b-4 * a * c) / 2 * a

y puede asignar estas expresiones a variables:

  v = (b*b-4*a*c)/2*a

En Haskell, también puede hacer esto, y lo que es más: las expresiones son realmente todo lo que hay, no hay declaraciones.

Funciones: En Python, puede definir una función como

    def hello(name):

        return "Hello, "+name

En Haskell puedes escribir esto simplemente como:

   hello name = "Hello, "++name

Tipos : C tiene tipos, por ejemplo:

    int f (int x, int y) {

        return x*y+x+y;

    }

Haskell tiene tipos mucho más poderosos que C, y se definen en una linea diferente de la función :

    f :: Int -> Int -> Int

    f x y =  x*y+x+y

Listas : En muchos lenguajes, p. Ej. Python, JavaScript, Ruby,… puedes crear listas como:

    lst = ["A", "lista", "de", "cadenas"]

Haskell también usa esta sintaxis para listas.

Para unirse a listas, en Python puede escribir

    lst = [1,2] + [3,4]

En Haskell esto sería muy similar:

    lst = [1,2] ++ [3,4]

Funciones anónimas : En JavaScript puede definir funciones anónimas (funciones sin nombre) como:

var f = function (x, y) {return x * y + x + y};

En Haskell, estas funciones anónimas se denominan funciones lambda y en realidad son la base del lenguaje. Nuevamente, la sintaxis es muy compacta:

f = \x y -> x*y+x+y

\ representa el símbolo lambda. 

Funciones de orden superior : Finalmente, en muchos lengujes, las funciones pueden operar sobre funciones. Por ejemplo, en Perl puede modificar los elementos en una lista usando:

    map sub ($x){$x*2+1}, [1..10]

Haskell proporciona muchas de las llamadas funciones de orden superior y le permite definir las suyas propias.

    map (\x -> x*2+1) [1..10]