Erlang ejercicio de simultaneidad del curso: ¿se puede mejorar mi respuesta?

Estoy haciendo este ejercicio desde el curso erlang.org:

2) Escriba una función que inicie N procesos en un anillo y envíe un mensaje M veces alrededor de todos los procesos en el anillo. Después de que se hayan enviado los mensajes, los procesos deben finalizar correctamente.

Esto es lo que se me ocurrió:

-module(ring).
-export([start/2, node/2]).

node(NodeNumber, NumberOfNodes) ->
  NextNodeNumber = (NodeNumber + 1) rem NumberOfNodes,
  NextNodeName = node_name(NextNodeNumber),
  receive
    CircuitNumber ->
      io:format("Node ~p Circuit ~p~n", [NodeNumber, CircuitNumber]),
      LastNode = NodeNumber =:= NumberOfNodes - 1,
      NextCircuitNumber = case LastNode of
                           true ->
                             CircuitNumber - 1;
                           false ->
                             CircuitNumber
                         end,
      if
        NextCircuitNumber > 0 ->
          NextNodeName ! NextCircuitNumber;
        true ->
          ok
      end,
      if
        CircuitNumber > 1 ->
          node(NodeNumber, NumberOfNodes);
        true ->
          ok
      end
  end.

start(NumberOfNodes, NumberOfCircuits) ->
  lists:foreach(fun(NodeNumber) ->
                    register(node_name(NodeNumber),
                             spawn(ring, node, [NodeNumber, NumberOfNodes]))
                end,
                lists:seq(0, NumberOfNodes - 1)),
  node_name(0) ! NumberOfCircuits,
  ok.

node_name(NodeNumber) ->
  list_to_atom(lists:flatten(io_lib:format("node~w", [NodeNumber]))).

Aquí está su salida:

17> ring:start(3, 2).
Node 0 Circuit 2
ok
Node 1 Circuit 2
Node 2 Circuit 2
Node 0 Circuit 1
Node 1 Circuit 1
Node 2 Circuit 1

Si realmente conociera a Erlang, ¿podría hacerlo de manera diferente para mejorar este código? Y específicamente:

¿Existe alguna alternativa para especificar una cláusula "verdadera" de no hacer nada en las últimas dos declaraciones if?

¿De hecho estoy terminando con gracia? ¿Se requiere alguna acción especial al finalizar un proceso que se registró?

Respuestas a la pregunta(3)

Su respuesta a la pregunta