Digamos que tengo este código aquí:¿De qué manera las declaraciones de casos mango Erlang mezclan con la recursión de cola
do_recv_loop(State) ->
receive
{do,Stuff} ->
case Stuff of
one_thing ->
do_one_thing(),
do_recv_loop(State);
another_thing ->
do_another_thing(),
do_recv_loop(State);
_ ->
im_dead_now
end
{die} -> im_dead_now;
_ -> do_recv_loop(State)
end.
Ahora, en teoría esto es recursiva de cola, ya que ninguna de las tres llamadas a do_recv_loop requerir cualquier cosa por estar devuelto. Pero ¿Erlang reconocerá que esto es recursivo de la cola y se optimizará apropiadamente? Me preocupa que la estructura anidada pueda hacer que no sea capaz de reconocerlo.
+1. Para cualquier lógica que sea ** provably ** tail-recursive, Erlang la optimiza según la definición del lenguaje. –
Me alegra que te hayas acostumbrado porque 'tailcall' es una idea realmente horrible. –