Prédicat tous_differents avec des couples [PROLOG] - Divers - Programmation
Marsh Posté le 25-10-2006 à 20:51:38
En SWI-Prolog, tu peux utiliser sort/2, qui va te trier la liste en ordre croissant des premiers éléments des couples, après tu n'as plus qu'à balayer ta liste pour répérer les couples identiques (si j'ai bien compris ce que tu demandes).
Marsh Posté le 26-10-2006 à 00:11:10
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...
Marsh Posté le 26-10-2006 à 00:55:47
ITM a écrit : En fait je veux générer des couples de coordonnés entières compris entre (X1,Y1) et (X2,Y2) |
C'est celà que tu veux ?
Code :
|
-? tous_les_tuples((1,2), (3,4),L). |
PS : fonctionne en SWI-Prolog
Marsh Posté le 26-10-2006 à 01:43:09
Ouais c'est exactement ça
Je connaissais pas du tout between, honte à moi (edit : et j'aurais pu le faire moi même d'ailleurs )
Merci mille fois en tout cas, je teste dès demain
Marsh Posté le 26-10-2006 à 10:04:41
S'embarquer dans des for, c'est le signe qu'on est encore marqué par la programmation impérative, enfin pour moi c'était le cas.
Prolog est puissant pour ce genre de problème : trouver tous les ...
Marsh Posté le 26-10-2006 à 14:31:16
Ouais je suis tout à fait d'accord
Alors, là j'ai un autre problème... En fait à mon école on est sur Prolog IV
Du coup, bagof me balance un joli "not implemented" quand je l'utilise dans ce cas là... j'ai vérifié, ça marche nickel avec SWI-Prolog. En remplaçant par findall ça me fait la même chose, pourtant que jais que celui là marche dans des cas plus simples.
J'ai l'impression qu'il sait pas qu'on est sur un espace de nombre entier ou je ne sais quoi. J'ai beau foutre des int(X1), int(Y1), ... Rien à faire...
Comment faire?
Marsh Posté le 26-10-2006 à 17:33:57
ITM a écrit : Ouais je suis tout à fait d'accord |
Désolé, je ne connais pas Prolog IV
Essaye sur DVP, peut-être pourra-t-on te renseigner ?
Marsh Posté le 26-10-2006 à 18:28:15
Reply
Marsh Posté le 25-10-2006 à 18:57:38
Salut!
Je n'arrive pas à trouver un prédicat satisfaisant pour faire un "tous_differents" sur une liste de couple d'entiers...
A chaque fois, j'arrive à un truc qui certe "marche" mais pose trop de contraintes, du coup ça complexifie énormément les choses pour rien
Vous avez une idée
Message édité par ITM le 25-10-2006 à 18:57:51
---------------
iteme.free.fr | Mon feedback