Recursión en Erlang
El bucle es una función llamándose; el acumulador la deja en cola.
%% Recursion is the loop; the accumulator keeps it a tail call.
total_minutes([], Acc) ->
Acc;
total_minutes([{_, Minutes} | Rest], Acc) ->
total_minutes(Rest, Acc + Minutes).
count_over([], _, Acc) -> Acc;
count_over([{_, M} | Rest], Limit, Acc) when M > Limit ->
count_over(Rest, Limit, Acc + 1);
count_over([_ | Rest], Limit, Acc) ->
count_over(Rest, Limit, Acc).
main(_) ->
Log = [{"5560199", 12}, {"5560142", 3}, {"5560170", 21}],
io:format("Billed minutes: ~p~n", [total_minutes(Log, 0)]),
io:format("Long calls: ~p~n", [count_over(Log, 10, 0)]).
Cómo funciona
- La cláusula de lista vacía devuelve el acumulador: el caso base.
- Cada paso pela un elemento y recurre sobre el resto.
- Una guarda parte las cláusulas de conteo por el límite.
Palabras clave y builtins usados aquí
when
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 554
- Tokens
- 182
- Ritmo de tres estrellas
- 60 tpm
Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 182 segundos.
Paso 1 de 3 en Recursión y comprensiones; paso 8 de 31 en Fundamentos del lenguaje.