-
Notifications
You must be signed in to change notification settings - Fork 1
Erlang Handbook
Usando homebrew, instala erlang y rebar3 con el siguiente comando.
brew update
brew install erlang rebar@3Dentro de la carpeta del proyecto, ejecuta el siguiente comando para ejecutar las pruebas unitarias.
rebar3 eunitPara comprender qué es Erlang, debemos entender que se trata de un entorno o plataforma de desarrollo completa. Erlang proporciona no solo el compilador para poder ejecutar el código, sino que posee también una colección de herramientas, y una máquina virtual sobre la que ejecutarlo, por lo tanto existen dos enfoques: Erlang: el lenguaje Hay muchas discusiones concernientes a si Erlang es o no un lenguaje funcional. En principio, está entendido que sí lo es, aunque tenga elementos que le hagan salirse de la definición pura. Por ello Erlang podría mejor catalogarse como un lenguaje híbrido, al tener elementos de tipo funcional, de tipo imperativo, e incluso algunos rasgos que permiten cierta orientación a objetos, aunque no completa. Donde encaja mejor Erlang, al menos desde mi punto de vista, es como un lenguaje orientado a la concurrencia. Erlang tiene una gran facilidad para la programación distribuida, paralela y concurrente y además con mecanismos para la tolerancia a fallos. Fue diseñado desde un inicio para ejecutarse de forma ininterrumpida. Esto significa que se puede cambiar el código de sus aplicaciones sin detener su ejecución.
BEAM: la máquina virtual Como hemos mencionado antes, Erlang es una plataforma de desarrollo que proporciona no solo un compilador, sino también una máquina virtual para su ejecución. A diferencia de otros lenguajes interpretados como Python, Perl, PHP o Ruby, Erlang se compila y su máquina virtual le proporciona una importante capa de abstracción que le dota de la capacidad de manejar y distribuir procesos entre nodos de forma totalmente transparente (sin el uso de librerías específicas).
Los átomos tienen como única finalidad ayudar al programador a identificar estructuras, algoritmos y código específico empleando muy poca memoria para ello.
> is_atom(a).
true
> is_atom(1).
falseSólo existen 2 tipos Integer y Float
> is_integer(1).
true
> is_integer(1.0).
false
> is_float(1.0).
true
> is_integer(1_000_000).
trueLa precisión numerica de erlang sorprendente.
> 17482738723*923848728*937373.
15139891831946638560918312Es posible expresar números con base 2, 8, 16, etc.
8#124.
2#1001.
16#1AE3.
El formato de las variables se inicia con una letra mayúscula, seguida de tantas letras, números y subrayados como se necesiten o deseen.
> Pi = 3.1415.
3.1415
> Telefono = "666555444".
"666555444"
> Depuracion = true.
true
> Base = 2.
2
> Altura = 5.2.
5.2
> Base * Altura.
10.4Si en un momento dado, queremos que Base tenga el valor 3 en lugar del valor 2 inicialmente asignado veríamos lo siguiente:
> Base = 2.
2
> Base = 3.
** exception error: no match of right hand side value 3Para efectos de prueba podemos eliminar el valor de una variable con la siguiente función.
> f(Base).
ok
> Base = 3.
3Las listas en Erlang son vectores de información heterogénea, es decir, pueden contener información de distintos tipos, ya sean números, átomos, tuplas u otras listas.
> [ 1, 2, 3, 4, 5 ].
[1,2,3,4,5]
> [ 1, "Hola", 5.0, hola ].
[1,"Hola",5.0,hola]
> [1,2,3] ++ [4].
[1,2,3,4].
> [1,2,3] -- [2].
[1,3]
Es posible recorrer una lista tomando valores de la cabecera dejando el resto en una sublista
> [H|T] = [1,2,3,4].
[1,2,3,4]
> H.
1
> T.
[2,3,4]
> [H1,H2|T2] = [1,2,3,4].
[1,2,3,4]
> H1.
1
> H2.
2
> T2.
[3,4]De esta forma tan sencilla la implementación de los conocidos algoritmos de push y pop de inserción y extracción en pilas resultan tan triviales como:
> Lista = [].
[]
> Lista2 = [1|Lista].
[1]
> Lista3 = [2|Lista2].
[2,1]
> [Extrae|Lista2] = Lista3.
[2,1]
> Extrae.
2
> Lista2.
[1]