anchor.diff:  fib(_) -> undefined.
   
   %% Three fib numbers in serial, as three values in a list.
  -fib3serial(N) -> [fib(N), fib(N), fib(N)].
  +fibSequential(NumCalcs, FibNum) ->
  +  [fib(FibNum) || _ <- lists:seq(1, NumCalcs)].
   
   
   
  
positive.code: -module(fibonacci).
  -export([fib/1, fib3serial/1, fib3parallel/1, fibThread/2]).
  
  fib(0) -> 1;
  fib(1) -> 1;
  
negative.code: %% A process to calculate 3 fib numbers by spawning 3 threads, sending
  %% each a message, then handling their responses to build a list of
  %% 3 values.
  fibParallel(NumThreads, FibNum) ->
    _ = [spawn(?MODULE, fibThread, [self(), FibNum]) || _ <- lists:seq(1, NumThreads)],
    %% Await the replies; 3 expected. Return them.
    awaitfibs(NumThreads, []).
  
  %% A loop to receive a certain number of messages contining fib
  %% results, then return a list containing all the results.
  awaitfibs(ThreadsLeft, Results) ->
    receive
      {_, FibN} when ThreadsLeft =:= 1 ->
        [FibN|Results];
      {_, FibN} ->
        awaitfibs(ThreadsLeft - 1, [FibN|Results])
    end.