Translate

sábado, 18 de abril de 2020

Elementos básicos en Haskell

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

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

y puedes asignar estas expresiones a variables:

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

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


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

C tiene tipos, por ejemplo:

    int f (int x, int y) {
        return x*y+x+y;
    }

Haskell tiene un sistema de tipos mucho más poderosos que C, y hablaremos mucho sobre los tipos:

    f :: Int -> Int -> Int
    f x y =  x*y+x+y

En muchos lenguajes, como Python, JavaScript, Ruby, ... puedes crear listas como:

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

Haskell también usa esta sintaxis para las listas.

Para unir listas, en Python podrías escribir

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

En Haskell esto sería muy similar:

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

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

    var f = función (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

Finalmente, en muchos lenguaje, las funciones pueden operar en 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 estas llamadas funciones de orden superior y le permite definir las suyas propias.

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