Допустим, у меня здесь есть этот код:
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.
Теперь, теоретически это хвостовая рекурсия, так как ни один из трех вызовов do_recv_loop не требует возврата. Но сможет ли erlang распознать, что это хвостовая рекурсия, и оптимизировать соответствующим образом? Я беспокоюсь, что вложенная структура может помешать ей распознать ее.