Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3771 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  [PROLOG] Prédicat tous_differents avec des couples

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PROLOG] Prédicat tous_differents avec des couples

n°1465022
ITM
Avatar peint à la main
Posté le 25-10-2006 à 18:57:38  profilanswer
 

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
mood
Publicité
Posté le 25-10-2006 à 18:57:38  profilanswer
 

n°1465047
Trap D
Posté le 25-10-2006 à 20:51:38  profilanswer
 

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).

n°1465126
ITM
Avatar peint à la main
Posté le 26-10-2006 à 00:11:10  profilanswer
 

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...
:hello:
 
 

n°1465137
Trap D
Posté le 26-10-2006 à 00:55:47  profilanswer
 

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...
:hello:


C'est celà que tu veux ?

Code :
  1. % je définis ce qu'est un tuple cherché
  2. tuple((X1,Y1),(X2,Y2), (X,Y)) :-
  3. between(X1,X2,X),
  4. between(Y1,Y2,Y).
  5. % J'indique à Prolog que je veux tous les tuples
  6. % verifiant mon, prédicat tuple
  7. tous_les_tuples(X, Y , L) :-
  8. 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
n°1465144
ITM
Avatar peint à la main
Posté le 26-10-2006 à 01:43:09  profilanswer
 

Ouais c'est exactement ça :love:
Je connaissais pas du tout between, honte à moi :D (edit : et j'aurais pu le faire moi même d'ailleurs :D)
Merci mille fois en tout cas, je teste dès demain :jap:


Message édité par ITM le 26-10-2006 à 01:44:11
n°1465222
Trap D
Posté le 26-10-2006 à 10:04:41  profilanswer
 

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 ...

n°1465444
ITM
Avatar peint à la main
Posté le 26-10-2006 à 14:31:16  profilanswer
 

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? :/

Message cité 1 fois
Message édité par ITM le 26-10-2006 à 14:33:10
n°1465606
Trap D
Posté le 26-10-2006 à 17:33:57  profilanswer
 

ITM a écrit :

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? :/

Désolé, je ne connais pas Prolog IV :/
Essaye sur DVP, peut-être pourra-t-on te renseigner ?

n°1465653
ITM
Avatar peint à la main
Posté le 26-10-2006 à 18:28:15  profilanswer
 

Ok, DVP, qu'est-ce :??:

n°1465698
Trap D
Posté le 26-10-2006 à 21:01:53  profilanswer
 

ITM a écrit :

Ok, DVP, qu'est-ce :??:

DVP c'est ici


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  [PROLOG] Prédicat tous_differents avec des couples

 

Sujets relatifs
Problème ligne de base CSS -> IE et Firefox différents ...pbm pour inverser une liste en prolog
interaction entres des pages web sur différents serveursHelp ! Macro excel pour importer données de differents onglets
css différents sur différents calques de textesparagraphes + float differents sous IE et Firefox
{Résolu}Comparer deux colonnes dans deux fichiers différentsProblèmes de variables communes à différents Threads
Filtre sur formulaire et défilement avec des droits différents suivant[Prolog] Garder en mémoire la valeur d'une variable
Plus de sujets relatifs à : [PROLOG] Prédicat tous_differents avec des couples


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)