2 votes

Erlang lists:map se comporte de manière étrange

Ok, voici ce qui se passe :

J'ai obtenu un morceau de code comme celui-ci :

A=lists:map(fun(Result) -> Result#o.prop1 
   end, ResultList),
B=lists:map(fun(Result) -> io:format("~p~n",Result#o.prop2),
   Result#o.prop2 
   end, ResultList),
io:format("~p ~p",[A,B])

Avant ce morceau de code, il y a une liste de résultats d'une recherche dans une base de données (chaque résultat a une valeur prop1 marquée comme "0" et une valeur prop2 marquée comme "74").

Ce qui se passe, c'est que A s'imprime correctement ("[0,0]") et que, bien que la première impression des éléments B un par un soit correcte (deux impressions de "74"), la liste elle-même s'imprime comme "JJ" (ces caractères sont toujours différents à chaque exécution).

Si je supprime l'impression élément par élément, ou même si j'intervertis l'ordre (la ligne de B puis celle de A), j'obtiens toujours un B erroné.

Une aide ?

3voto

macintux Points 894

La raison pour laquelle vous voyez J au lieu de 74 est due au fait qu'Erlang traite les chaînes comme des listes d'entiers, et que J correspond à 74 (décimal) en ASCII.

1> io:format("~s~n", [[74, 74]]).
JJ
ok
2> io:format("~s~n", [[71, 72, 73, 74, 75]]).
GHIJK
ok
3> io:format("~p~n", [[71, 72, 73, 74, 75]]).
"GHIJK"
ok

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X