miércoles, 19 de mayo de 2021

Erlang en ejemplos

En pasados post vimos como instalar una imagen de Erlang usando Docker. También vimos como instalar Erlang en nuestra máquina. Una diferencia entre la ejecución de un programa Erlang usando la imagen instalada con docker es que debe haber un metódo main con un argumento:
holamundo.erl
% Hola mundo en Erlang
-module(holamundo).
-import(io, [format/1]).
-export([main/1]).

main(_Args) ->
    format("Hola, mundo con Erlang!!~n").

Ejecutando con Docker:
$ docker run -it --rm --name erlang-inst1 -v "$PWD":/usr/src/myapp -w /usr/src/myapp erlang escript holamundo.erl

Teniendo instalado Erlang en nuestras máquinas el código cambia un poco. No es necesario contar con un método main con un argumento.
holamundo2.erl
% Hola mundo en Erlang
-module(holamundo).
-import(io, [format/1]).
-export([start/0]).

start() ->
    format("Hola, mundo con Erlang!!~n").

Ejecutando sin Docker:
$ erl
> c(holamundo2).
> holamundo2:start().

Es importante recordar que toda variable en Erlang debe comenzar con una mayúscula y toda instrucción termina con un punto. Tampoco puedes reasignar un valor a una variable con valor asignado previamente.
$ erl

Erlang/OTP 24 [erts-12.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [jit]

Eshell V12.0  (abort with ^G)
1> E=0.
0
2> 0=E.
0
3> E=8.
** exception error: no match of right hand side value 8
4> E=4.
** exception error: no match of right hand side value 4
5> 
BREAK: (a)bort (A)bort with dump (c)ontinue (p)roc info (i)nfo
       (l)oaded (v)ersion (k)ill (D)b-tables (d)istribution

Ejemplo. Crear una función que sume dos número enteros.
suma.erl
-module(suma).
-author("Codemonkey Junior").
-version("1.0.0").
-export([suma/2, main/1]).
-import(io, [format/1]).
-import(io, [format/2]). main(_Args)-> format("Sumar dos numeros en Erlang~n"), A = 2, B = 3, suma(A,B). suma(A, B)-> format("A=~p~n",[A]), format("B=~p~n",[B]), RESULT = A+B, format("Suma=~p~n",[RESULT]). % erl % c(suma). % suma:main(1). % q().
Ejecutamos...
$ erl
> c(suma).
> suma:main(1).
> q().

En próximos post veremos más ejemplos.
Enlaces:
https://codemonkeyjunior.blogspot.com/2020/09/docker-instalando-erlang.html
https://erlang-otp.es/
https://learnyousomeerlang.com/

2 comentarios:

  1. Está muy bueno!
    Es una excelente introducción y muy bueno que hayas mostrado escript! 👏

    Un tip nomás: en general es preferible no usar -import.
    Escribir io:format("Suma=~p~n", [RESULT]). no son tantos caracteres más y tiene varios beneficios:
    - Se puede copiar y pegar directo a la consola para debuggear.
    - Es claro para quien lo lee que eso no es una función interna del módulo (se ahorra tiempo perdido en buscar dónde está definida la función)

    Para más tips de cómo escribir Erlang "prolijito", te recomiendo: https://github.com/inaka/erlang_guidelines

    ResponderEliminar
    Respuestas
    1. Gracias por tu comentario y sugerencia. Le echaré un vistazo.

      Eliminar