-module(treeprod).
-export([treeprod/0,join/1]).

treeprod() -> 
  receive
    {{Left, Right}, Customer} ->
       NewCust = spawn(treeprod,join,[Customer]),
       LP = spawn(treeprod,treeprod,[]),
       RP = spawn(treeprod,treeprod,[]),
       LP!{Left,NewCust},
       RP!{Right,NewCust};
    {Number, Customer} -> 
       Customer ! Number
  end,
  treeprod().

join(Customer) -> receive V1 -> receive V2 -> Customer ! V1*V2 end end.

%% use, e.g., as follows:
%%
%% > c(treeprod)
%% > TP = spawn(treeprod,treeprod,[]).
%% > TP ! {{{{5,6},2},{3,4}},self()}.
%% > flush().
%%  Shell got 720
