Guardas en Erlang
when refina una cláusula después de que su patrón matchea.
%% Guards refine a clause: when filters after the pattern matches.
charge(Minutes) when Minutes =< 3 ->
10;
charge(Minutes) when Minutes =< 10 ->
10 + (Minutes - 3) * 4;
charge(Minutes) when is_integer(Minutes) ->
38 + (Minutes - 10) * 2.
main(_) ->
[io:format("~p min costs ~p pence~n", [M, charge(M)])
|| M <- [2, 7, 15]],
io:format("Long call: ~p~n", [charge(30)]).
Cómo funciona
when Minutes =< 3elige la cláusula de tarifa plana.- El orden importa: cada cláusula asume que las anteriores fallaron.
is_integer/1guarda el comodín contra entrada mala.
Palabras clave y builtins usados aquí
is_integerwhen
El intento, en números
- Líneas
- 12
- Caracteres a escribir
- 369
- Tokens
- 114
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 105 segundos.
Paso 2 de 4 en Coincidencia de patrones; paso 5 de 31 en Fundamentos del lenguaje.