IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Prolog Discussion :

Problème liste Prolog


Sujet :

Prolog

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 19
    Points : 13
    Points
    13
    Par défaut Problème liste Prolog
    Bonjour à tous,

    Voilà, j'ai un ptit souci en prolog en ce qui concerne les listes.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ajouter(X, L, [X|L]).
    plus_court(X,'sortie',Z):-aller(X,'sortie',S),longueur(S,T),ajouter(T,L,Z),L is Z.
    Explications:
    Le prédicat "aller" renvoie plusieurs listes en bouclant. Je récupère à chaque fois sa longueur (T) grâce au prédicat "longueur". Mais le problème est que je voudrais mettre ce résultat de longueur sous forme d'une liste.
    A chaque passage dans la boucle, il devra insérer la longueur de la liste dans une nouvelle liste.

    Exemple :
    Au 1er passage :
    S=[1,2,3,4] -> T=4 -> Z=[4]
    Au 2ème passage :
    S=[1,2] -> T=2 -> Z=[2,4]
    et ainsi de suite jusqu'à la fin de ma boucle.
    Donc à la fin, je dois récupérer : Z=[2,4]

    J'espère avoir été assez claire, je vous remercie d'avance pour vos réponses.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Peut-être peux-tu essayer un bagof
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bagof(T, (X^aller(X,'sortie',S),longueur(S,T)), Z),
    Sans garantie aucune, car je ne connais pas le code de aller.

    [edit] Après test, c'est un findall qu'il faut mettre !
    Je poste la réponse dans ce message, car on ne peut pas ajouter de réponse actuellement
    [/edit]
    [editbis]Maintenant on peut ! voir plus bas [/editbis]
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Voici le code de aller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aller(X,Y,S):-rechPf(X,Y,[X],S)
    celui de rechPf:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    rechPf(Ef,Ef,_,[]):-!.
    rechPf(Ec,Ef,Chemin,[Coup|Solution]):-
      operateur(Ec,Coup,Es),
      not(interdit(Es)),
      not(member(Es,Chemin)),
      write(Ec),write(' '),write(Coup),write(' '),write(Es),nl,
      rechPf(Es,Ef,[Es|Chemin],Solution).
     
    operateur(X,[X,Y],Y) :- couloir(X,Y).
    operateur(X,[X,Y],Y) :- couloir(Y,X).
     
    interdit(minotaure).
    interdit(puits).
    interdit(impasse).
    En fait, "aller" me renvoye une liste de liste à 2 arguments. Et c'est de cette liste que je veux la longueur. Par exemple:
    S= [[a,b],[c,d],[e,f]] ->T=3 (T du "plus_court")
    S= [[a,b],[c,d]] T=2

    -> Z=[2,3] (Z du "plus_court")

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    C'était un findall qu'il fallait faire.
    J'ai essayé avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    couloir(1,2).
    couloir(2,3).
    couloir(2,4).
    couloir(3,minautore).
    couloir(3,5).
    couloir(5,sortie).
    couloir(4,6).
    couloir(6,7).
    couloir(7,8).
    couloir(7,puits).
    couloir(8,9).
    couloir(9, sortie).
     
     
    ajouter(X, L, [X|L]).
     
    aller(X,Y,S):-
    	rechPf(X,Y,[X],S).
     
     
    longueur_trajet(X, Z) :-
    	findall(T, (aller(X,'sortie',S),length(S,T)), Z).
     
    plus_court(X,'sortie',Z):-
    	aller(X,'sortie',S),
    	length(S,T),
    	ajouter(T,L,Z),
    	L is Z.
     
    rechPf(Ef,Ef,_,[]):-!.
     
    rechPf(Ec,Ef,Chemin,[Coup|Solution]):-
    	operateur(Ec,Coup,Es),
    	not(interdit(Es)),
    	not(member(Es,Chemin)),
    	%write(Ec),write(' '),write(Coup),write(' '),write(Es),nl,
    	rechPf(Es,Ef,[Es|Chemin],Solution).
     
    operateur(X,[X,Y],Y) :- couloir(X,Y).
    operateur(X,[X,Y],Y) :- couloir(Y,X).
     
    interdit(minotaure).
    interdit(puits).
    interdit(impasse).
    qui n'a peut-être malheureusement rien à voir avec ce que tu recherches .

    Exemple de résultats :
    1 ?- longueur_trajet(1, Z).

    Z = [4, 7] ;

    No
    2 ?- longueur_trajet(3, Z).

    Z = [2, 7] ;

    No
    3 ?- longueur_trajet(6, Z).

    Z = [4, 5] ;

    No
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Un énorme MERCI
    C'est exactement ça que je cherchais.
    YES, merci beaucoup.
    T'es un as en prolog !!!

    Maintenant que c'est règlé, je vais pouvoir continuer.
    Ca fait presque une semaine que j'étais sur ce probleme. Là tu m'as vraiment sauvé !!
    Merci

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Alors un petit clic sur et tout sera OK
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de Listes Prolog
    Par xeron33 dans le forum Prolog
    Réponses: 6
    Dernier message: 16/08/2009, 09h46
  2. [presque résolu]Probléme liste déroulante
    Par jojo57 dans le forum Access
    Réponses: 5
    Dernier message: 21/04/2006, 11h57
  3. Réponses: 2
    Dernier message: 21/01/2005, 12h55
  4. Problème liste d'affichage
    Par nicolas66 dans le forum OpenGL
    Réponses: 6
    Dernier message: 06/12/2004, 10h10
  5. [JSP]Problème liste deroulante dynamique
    Par besco dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 09/09/2004, 17h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo