La grande difficulté que j’ai eu réside dans la conversion de fonction qui bâtissent des listes « linéairement » en fonction qui les bâtissent en parallèle pour le cas où l’ordre des éléments de la liste ne compte pas vraiment.
Par exemple, la fonction :
calculateitems ([H | T], N) ->
[onestock(H, N) | calculateitems(T, N)];
calculateitems([], N) ->
[].
Retourne un message d’erreur “badarith” lorsqu’exprimé comme ça :
calculateitems(L, N) –>
S = self,
Pids = lists:map( fun(X) -> spawn(portfolio, onestock/2, [X, N]) end, L),
gather(Pids).
gather([H | T]) ->
Receive
{H, Ret} -> [Ret | gather(T)]
end;
gather([]) ->
[].
Pourtant la fonction onestock ne comporte aucun changement d’une forme à l’autre. Remplaçant spawn par proc_lib:spawn nous donne plus d’information mais le mystère demeure :
** exited: {badarith,[{portfolio,'-calculateitemsp/2-fun-0-',2},
{portfolio,calculateitemsp,2},
{portfolio,calculate,2},
{lists,map,2},
{portfolio,simulate,3},
{erl_eval,do_apply,5},
{shell,exprs,6},
{shell,eval_loop,3}]} **
=ERROR REPORT==== 30-Aug-2007::12:49:52 ===
Error in process <0.57.0> with exit value: {badarith,[{portfolio,'-calculateitemsp/2-fun-0-',2},{portfolio,calculateitemsp,2},{portfolio,calculate,2},{lists,map,2},{portfolio,simulate,3},{erl_eval,do_apply,5},{shell,exprs,6},{shell,eval_loop,3}]}
La documentation disponible sur le ‘net est au mieux faible. Est-ce que quelqu’un aurait une solution à mon problème?