-module(fibonacci). -export([fibonacci/0,join/1]). fibonacci() -> receive {Number, Customer} when Number > 1 -> NewCust = spawn(fibonacci,join,[Customer]), P = spawn(fibonacci,fibonacci,[]), Q = spawn(fibonacci,fibonacci,[]), P!{Number - 1,NewCust}, Q!{Number - 2,NewCust}; {Number, Customer} -> Customer ! Number end, fibonacci(). 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