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

  FORUM HardWare.fr
  Programmation
  Divers

  pbm pour inverser une liste en prolog

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pbm pour inverser une liste en prolog

n°1427432
weblook$$
Posté le 18-08-2006 à 18:20:21  profilanswer
 

Bonjour ,
 
my_rev([],_).
my_rev([X|Xs],Acc) :- my_rev(Xs,[X|Acc]).
 
Quand j'éxécute ce programme , j'obtiens yes mais je ne peux pas consulter le contenu de Acc, qui théoriquement contient la liste X inversé.
 
Par contre quand j'éxécute le code suivant :
 
my_reverse(L1,L2) :- my_rev(L1,L2,[]).
my_rev([],L2,L2):-!.
my_rev([X|Xs],L2,Acc) :- my_rev(Xs,L2,[X|Acc]).
 
je peux consulter L2 mais , la réponse à ce programme est No.
 
 
je suis perdu, besoin d'aide, merci

mood
Publicité
Posté le 18-08-2006 à 18:20:21  profilanswer
 

n°1427851
Trap D
Posté le 20-08-2006 à 00:47:18  profilanswer
 

weblook$$ a écrit :

Bonjour ,
 
my_rev([],_).
my_rev([X|Xs],Acc) :- my_rev(Xs,[X|Acc]).
 
Quand j'éxécute ce programme , j'obtiens yes mais je ne peux pas consulter le contenu de Acc, qui théoriquement contient la liste X inversé.
 
Par contre quand j'éxécute le code suivant :
 
my_reverse(L1,L2) :- my_rev(L1,L2,[]).
my_rev([],L2,L2):-!.
my_rev([X|Xs],L2,Acc) :- my_rev(Xs,L2,[X|Acc]).
 
je peux consulter L2 mais , la réponse à ce programme est No.
 
 
je suis perdu, besoin d'aide, merci


Voilà une méthode possible sans accumulateur :

Code :
  1. % l'inverse d'une liste vide est une liste vide
  2. my_rev([],[]).
  3. % pour inverser une liste, je mets le premier élémement de la liste
  4. % à la fin du reste de la liste inversée
  5. my_rev([X|Xs],Acc) :-
  6.     my_rev(Xs,Acc1),
  7.     append(Acc1, [X], Acc).


Si tu es sous SWI-Prolog, je te conseille de tracer ton premier programme ((tu tapes trace. sous le prompt) et de regarder ce qui se passe lorsque tu tapes my_rev([1,2,3], X)., tu comprendras ton erreur.
Tes clauses ne sont pas constructives.
 

n°1428063
weblook$$
Posté le 20-08-2006 à 16:07:48  profilanswer
 

très sympa comme outil ce trace, mais quel est la signification de ces codes eg: _G495, _L191 etc..?

n°1428079
Trap D
Posté le 20-08-2006 à 16:58:57  profilanswer
 

_G495 signifie qu'une variable (X par exemple) n'a pas encore été unifiée et donc qu'elle est repérée pour l'instant que par cette référence.
_G pour varaible Globale, _L pour varaible locale au traitement, (tout au moins c'est que j'en déduis de cet exemple :
[trace] 1 ?- my_rev([1,2,3], X).
   Call: (7) my_rev([1, 2, 3], _G487) ? creep
   Call: (8) my_rev([2, 3], _L171) ? creep
   Call: (9) my_rev([3], _L191) ? creep
   Call: (10) my_rev([], _L211) ? creep
   Exit: (10) my_rev([], []) ? creep
   Call: (10) append([], [3], _L191) ? creep
   Exit: (10) append([], [3], [3]) ? creep
   Exit: (9) my_rev([3], [3]) ? creep
   Call: (9) append([3], [2], _L171) ? creep
   Exit: (9) append([3], [2], [3, 2]) ? creep
   Exit: (8) my_rev([2, 3], [3, 2]) ? creep
   Call: (8) append([3, 2], [1], _G487) ? creep
   Exit: (8) append([3, 2], [1], [3, 2, 1]) ? creep
   Exit: (7) my_rev([1, 2, 3], [3, 2, 1]) ? creep
 
X = [3, 2, 1]  
 
Yes


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

  pbm pour inverser une liste en prolog

 

Sujets relatifs
Problème clic zone de liste modifiableEXCEL: Liste on the go ...
[RCH]Liste de commande à travers des fichiers TXT[Perl][emacs] Liste des fonctions du programme dans le menu
[Help] Renommer une liste de fichier[Résolu] Centrage CSS et liste à image de fond
Recuperer la valeur dans une liste déroulanteProbleme d'affichage d'une liste déroulante lors dun apel d1 fonction
[PHP]Liste déroulante vers URLPblm liste déroulante directement cliquable
Plus de sujets relatifs à : pbm pour inverser une liste en prolog


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR