El case:
1> Animal = "dog".
2> case Animal of
2> "dog" -> underdog;
2> "cat" -> thundercat
2> end.
underdog
3> case Animal of
3> "elephant" -> dumbo;
3> _ -> something_else
3> end.
something_else
el _ es como el “default” de c, c++, java, etc...
El si es un tanto diferente a lo que conocemos, el si puede tener varias condiciones y varios resultados:
8> X = 0.
9> if
9> X > 0 -> positive;
9> X < 0 -> negative;
9> true -> zero
9> end.
Similar a javascript se puede asignar una función a una variable:
16> Negate = fun(I) -> -I end.
#Fun
17> Negate(1).
-1
18> Negate(-1).
1
Podemos usar funciones con listas
1> Numbers = [1, 2, 3, 4].
[1,2,3,4]
2> lists:foreach(fun(Number) -> io:format("~p~n", [Number]) end, Numbers).
1
2
3
4
ok
lists:foreach permite aplicar una función a cada elemento de una lista.
Si queremos filtrar los menores a 3 por ejemplo, es muy facil con lists:filter :
11> Small = fun(X) -> X < 0 end.
12> lists:filter(Small, Numbers).
[1,2]
EL lenguaje también provee una forma de saber si todos los elementos de una lista cumplen con un filtro:
15> lists:all(Small, [0, 1, 2]).
true
16> lists:all(Small, [0, 1, 2, 3]).
false
o si alguno lo cumple:
17> lists:any(Small, [0, 1, 2, 3]).
true
18> lists:any(Small, [3, 4, 5]).
false
Con foldl se puede hacer que una variable sea mantenida mientras la función esta iterando por la lista:
28> Numbers.
[1,2,3,4]
29> lists:foldl(fun(X, Sum) -> X + Sum end, 0, Numbers).
10
Como podemos ver la variable Sum se va pasando por cada ejecución de la función que acumula, y al comenzar la ejecución Sum = 0.
Hasta aquí hemos recorrido a vuelo de pájaro Erlang, un lenguaje original que nos muestra que se pueden hacer las cosas de diferente modo.