Erlang roots.

by Gastón Ramos

Empezar a codificar con Erlang viniendo de un lenguaje orientado a objetos como Ruby, se siente como intentar tocar Reggae viniendo del Rock, al principio parece imposible, todo muy raro y sobre todo se siente bastante extraño, supongo que significa que estoy aprendiendo algo realmente nuevo y no más de lo mismo. Hace mucho tiempo que tengo ganas de explorar en este lenguaje pero por varias razones sostuve esta iniciativa por más de un día :), yo soy así a veces cuelgo con las cosas pero al final siempre más tarde o más temprano termino haciéndolas, bueno a lo mejor estar vez funcionó por que empecé con este tutorial que es muy bueno:

http://www.erlang.org/download/getting_started-5.4.pdf

Hice hasta el ejercicio número 15, la verdad que es bastante llevadero, llegué hasta la parte de los procesos que lo realmente interesante de Erlang, el primer ejemplo de procesos es hacer un ping-pong y ahi con ese ejercicio tan simple podemos ver como comunicar dos procesos de Erlang y como hacer que interactúen. Lo que tiene el tutorial es que desde el principio mediante ejemplos le vas a agarrando la onda a la programación funcional, me pareció muy didáctico. Probablemente la semana que viene escriba un post un poco más intersante que este comparando el manejo de procesos de Erlang con el de Ruby.
Para instalar el intérprete de Erlang en debian basta con hacer

apt-get install erlang

acá les dejo el link al repo en github dónde puse todos los ejercicios que hice:

https://github.com/gramos/practica/blob/master/erlang

y el código del ping pong que está en el tutorial:

-module(tut15).

-export([start/0, ping/2, pong/0]).

ping(0, Pong_PID) ->
    Pong_PID ! finished,
    io:format("ping finished~n", []);

ping(N, Pong_PID) ->
    Pong_PID ! { ping, self() },
    receive
        pong ->
            io:format("Ping received pong~n", [])
    end,
    ping(N - 1, Pong_PID).

pong() ->
    receive
        finished ->
            io:format("Pong finihsed~n", []);

        { ping, Ping_PID } ->
            io:format("Pong received ping~n", []),
            Ping_PID ! pong,
            pong()
    end.

start() ->
    Pong_PID = spawn(tut15, pong, []),
    spawn(tut15, ping, [3, Pong_PID]).

Hasta la próxima.