Dans le futur, on va implémenté l'arc consistance.
Les domaines ne seront pas figé, il doivent pouvoir être privé de certain(s) intervalle(s) de valeur ainsi qu'être restauré au moment de retour en arrière.
Pour cela on peut par exemple, au lieu de stocker un seule domaine dans une variable, stocker une liste des domaines.
On peut par exemple faire comme l'a dit le prof une pile des domaines pour chaque variable. Chaque pile de variable est initialisée avec une pile contenant son domaine initiale. On pourra au cours de l'algorithme empiler dans la pile des domaines d'une variable son nouveau domaine.
Il faut également sauvegardé le fait de l’empilement de domaines des variables; ensuite lors d'un appelle à la fonction variablePrecedente, il faut avec le changement de variable, dépiler pour chaque variable concerné le domaine pour retrouver le contexte précédent.
On pourra par exemple, pour chaque variables lors du retour arrière, leurs donné une liste des variable dont il faut dépiler le domaine. On ajouterai et supprimerai des variables dans cette liste au cours de l'algorithme. Il faudrai en plus dans la fonction variablePrecedente, dépiler un domaine pour chaque élément de cette liste.
On pourrai se passer de ces sauvegarde de "qui c'est à qui on va dépiler son domaine en backtrackant depuis cette variable ?" en faisant un algorithme récursif qui prendrai en entré un état actuelle du CSP (avec des domaines éventuellement modifié par rapport à l'appel récursif précédent). J'aime un peu moins cette méthode car dans ce cas récursif, on empilera très certainement des choses qui n'ont pas changé et cela consomme de l'espace. Je trouve de plus que ça cache le fait que de toute façon on doit sauvegarder les modifications apportés aux domaines, donc autant le faire explicitement nous même avec des petites piles, plutôt que d'empiler d'un coup tout le CSP de manière implicite via les "facilités" de langage.
Bon ensuite tous ça ne change pas la représentations brute d'un domaine: par énumération des valeurs, ou par énumérations des intervalles, ou bien autre choses.