Trap D | ITM a écrit :
En fait je veux générer des couples de coordonnés entières compris entre (X1,Y1) et (X2,Y2)
Ma démarche est :
- Générer une liste de (X2-X1+1)*(Y2-Y1+1) couplets
- Contraindre la liste de couplets (en gros couplets_tous_entiers, valeurs_tous_compris_entre X1 et X2, Y1 et Y2, couplets_tous_différents)
- Enumérer
Le tous_differents me fait crasher le prog : j'ai fait un truc trop complexe ou les contraintes se recoupent (à cause d'un ou qui est pas mutuellement exclusif), alors je me demandais si y'avait plus simple...
En attendant j'ai remplacé cette méthode par un double "for" mais c'est pas vraiment l'esprit Prolog et c'est l'usine comparé à ça...

|
C'est celà que tu veux ?
Code :
- % je définis ce qu'est un tuple cherché
- tuple((X1,Y1),(X2,Y2), (X,Y)) :-
- between(X1,X2,X),
- between(Y1,Y2,Y).
- % J'indique à Prolog que je veux tous les tuples
- % verifiant mon, prédicat tuple
- tous_les_tuples(X, Y , L) :-
- bagof(T, tuple(X,Y,T), L).
|
-? tous_les_tuples((1,2), (3,4),L).
L = [ (1, 2), (1, 3), (1, 4), (2, 2), (2, 3), (2, 4), (3, 2), (3, 3), (..., ...)] ;
No |
PS : fonctionne en SWI-Prolog Message édité par Trap D le 26-10-2006 à 01:03:15
|