ここにこのコードがあるとしましょう:
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への3つの呼び出しのいずれも、何も返す必要がないためです。しかし、erlangはこれが末尾再帰であることを認識し、適切に最適化しますか?ネストされた構造で認識できなくなるのではないかと心配です。