anchor.diff:  % Fuse = FuseFunc | {recursive, FuseFunc}
   % FuseFunc = (term(), term()) -> term()
   runmany(Fun, Fuse, List, Malt) when is_list(Malt) ->
  -    % If the sublist size wasn't specified, assume a default.
  -    case lists:any(fun (X) when is_integer(X) ->
  -			   true;
  -		       (_) ->
  -			   false
  -		   end, Malt) of
  -	true ->
  -	    runmany(Fun, Fuse, List, local, Malt);
  -	false ->
  -	    case lists:foldl(fun({processes, X}, _A) ->
  -				     X;
  -				(_, A) ->
  -				     A
  -			     end, no_processes, Malt) of
  -		no_processes ->
  -		    runmany(Fun, Fuse, List, local, [1|Malt]);
  -		X ->
  -		    % split list into X sublists.
  -		    L = length(List),
  -		    case L rem X of
  -			0 ->
  -			    runmany(Fun, Fuse, List, local, [L div X|Malt]);
  -			_ ->
  -			    runmany(Fun, Fuse, List, local, [L div X + 1|Malt])
  -		    end
  -	    end
  -    end;
  +    runmany(Fun, Fuse, List, local, no_split, Malt);
   runmany(Fun, Fuse, List, Malt) ->
       runmany(Fun, Fuse, List, [Malt]).
   
  -runmany(Fun, Fuse, List, Nodes, [MaltTerm|Malt]) when is_integer(MaltTerm) ->
  -    runmany(Fun, Fuse, splitmany(List, MaltTerm), Nodes, Malt);
  +runmany(Fun, Fuse, List, Nodes, no_split, [MaltTerm|Malt]) when is_integer(MaltTerm) ->
  +    runmany(Fun, Fuse, List, Nodes, MaltTerm, Malt);
  +% run a process for each scheduler
  +runmany(Fun, Fuse, List, local, Split, [{processes, schedulers}|Malt]) ->
  +    S = erlang:system_info(schedulers),
  +    runmany(Fun, Fuse, List, local, Split, [{processes, S}|Malt]);
  +% Split the list into X sublists, where X is the number of processes
  +runmany(Fun, Fuse, List, local, no_split, [{processes, X}|_]=Malt) ->
  +    L = length(List),
  +    case L rem X of
  +	0 ->
  +	    runmany(Fun, Fuse, List, local, L div X, Malt);
  +	_ ->
  +	    runmany(Fun, Fuse, List, local, L div X + 1, Malt)
  +    end;
   % run X process on local machine
  -runmany(Fun, Fuse, List, local, [{processes, X}|Malt]) ->
  +runmany(Fun, Fuse, List, local, Split, [{processes, X}|Malt]) ->
       Nodes = lists:duplicate(X, node()),
  -    runmany(Fun, Fuse, List, Nodes, Malt);
  -runmany(Fun, Fuse, List, Nodes, [{timeout, X}|Malt]) ->
  +    runmany(Fun, Fuse, List, Nodes, Split, Malt);
  +runmany(Fun, Fuse, List, Nodes, Split, [{timeout, X}|Malt]) ->
       Parent = self(),
       Timer = spawn(fun () ->
   			  receive
  
positive.code: 	    ok
      end.
  
  fuse(Fuse, [R1|Results]) ->
      fuse(Fuse, Results, R1);
  fuse(_, []) ->
  
negative.code: %
  % You can use {processes, X} to have the list processed
  % by X processes on the local machine. A good choice for X is the number of
  % lines of execution (cores) the machine provides. This can be done
  % automatically with {processes, schedulers}, which sets
  % the number of processes to the number of schedulers in the erlang virtual
  % machine (probably equal to the number of cores).
  %
  % {timeout, Milliseconds} specifies a timeout. This is a timeout for the entire
  % operation, both operating on the sublists and combining the results.
  