Как erlang обрабатывает операторы case, смешанные с хвостовой рекурсией

Допустим, у меня здесь есть этот код:

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

13
задан Mediocre Gopher 24 March 2011 в 21:42
поделиться