27-07-2012, 12:03 AM
Bon ben je définis un record 'square' qui est une structure de données aux propriétés 'x', 'y' et 'user'.
tableXY() renvoie ce que tu demandes, ici j'utilises un dictinnaire pour stocker mes valeurs(1).
Pour faire ce que tu as demandé, j'utilise un pli sur ma liste de squares afin de ranger dans un dictionnaire mes squares selon leurs coordonnées.
je prends un dictionnaire vide (dict:new()), je le balance dans mon pli sur la liste Squares avec une lambda (fun(...) -> ... end) qui ajoute le square courant à la liste représentée par la clé {X,Y} de mon dict, X et Y étant récupérées via l'interface d'accès à mon record (e.g. I#square.x).
Ensuite, ma fonction test renvoie la liste de squares présents au point {1,1}. la structure "case of" est là parce que mon dict renvoie error si la clé demandée n'est pas présente (auquel cas je renvoie une liste vide : aucun square à ces coordonnées).
(1) Mais en temps normal on rendrait opaque cette structure de données en fournissant une interface et les fonctions qui vont bien afin que l'utilisateur du code n'aie pas à savoir ni comment est représenté un 'square', ni comment ils sont stockés au sein de notre application.
Là seule chose qu'il veut c'est récupérer tous les squares au sein d'un même point {x, y}.
tableXY() renvoie ce que tu demandes, ici j'utilises un dictinnaire pour stocker mes valeurs(1).
Pour faire ce que tu as demandé, j'utilise un pli sur ma liste de squares afin de ranger dans un dictionnaire mes squares selon leurs coordonnées.
je prends un dictionnaire vide (dict:new()), je le balance dans mon pli sur la liste Squares avec une lambda (fun(...) -> ... end) qui ajoute le square courant à la liste représentée par la clé {X,Y} de mon dict, X et Y étant récupérées via l'interface d'accès à mon record (e.g. I#square.x).
Ensuite, ma fonction test renvoie la liste de squares présents au point {1,1}. la structure "case of" est là parce que mon dict renvoie error si la clé demandée n'est pas présente (auquel cas je renvoie une liste vide : aucun square à ces coordonnées).
(1) Mais en temps normal on rendrait opaque cette structure de données en fournissant une interface et les fonctions qui vont bien afin que l'utilisateur du code n'aie pas à savoir ni comment est représenté un 'square', ni comment ils sont stockés au sein de notre application.
Là seule chose qu'il veut c'est récupérer tous les squares au sein d'un même point {x, y}.