typestar

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

  1. La cláusula de lista vacía devuelve el acumulador: el caso base.
  2. Cada paso pela un elemento y recurre sobre el resto.
  3. Una guarda parte las cláusulas de conteo por el límite.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 3 en Recursión y comprensiones; paso 8 de 31 en Fundamentos del lenguaje.

← Anterior Siguiente →