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 :

Inverser chaque 2nd element de liste


Sujet :

Prolog

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 19
    Points : 16
    Points
    16
    Par défaut Inverser chaque 2nd element de liste
    Bonjour,

    Je débute en Prolog et j'aurais besoin d'aide s'il vous plait, comment faire pour inverser chaque pair dans une liste, ce que je veux dire c'est de cette façon
    inversepair([1,2,3,4,5],[2,1,4,3,5]).

    J'ai une inversion ici mais comment faire pour une pair?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    accuInv([H|T],A,R) :- accuInv(T,[H|A],R).
    accuInv([],A,A).
    Merci d'avance

  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
    On prend deux éléments |A,B|T] !
    "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
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup!

    J'ai fait comme conseillé ça marche en modifiant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    accuInv([H,H1|T],A,R) :- accuInv(T,[H,H1|A],R).
    accuInv([],A,A).
    avec accuInv([1,2,3,4],[],X). cela marche impec, mais si je change sur accuInv([1,2,3,4,5],[],X). cela me retourne false, est-ce parce que il ne trouve pas de nombre pair? Comment faire pour lui éviter ce problème? Dois-je faire une lenght pour compter les pairs?

    Merci d'avance

  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
    IL faut prevoir le cas où le nombre d'léments de la liste est impair.
    Comment s'en rend-on compte ?
    "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
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    En vérifiant avec la liste? Si on a plus le Head mais que le tail alors il est impair?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    paire([_|T]) :- impaire([T]).

  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
    Non, il faut considérer la clause accuInv([X], .....
    "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

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Bonjour

    merci de votre réponse, je pense être un peu perdu, j'ai essayé de considérer la clause en me disant si il ne reste qu'un dernier élément comparé à l'accumulateur
    alors je le passe dans l'accumulateur sans m'occuper de la pair mais je ne sais pas ou est mon erreur?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    accuInv([x],[h|t],r):= accuInv(t,[h|x],r).
    accuInv([H,H1|T],A,R) :- accuInv(T,[H,H1|A],R).
    accuInv([],A,A).

  8. #8
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    accuInv([x],[h|t],r):= accuInv(t,[h|x],r).
    Ça marcherait déjà beaucoup mieux avec des majuscules !
    Ensuite j'écrirais : accuInv([X], T, [X | T]). simplement.
    "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

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup!

    Oui effectivement mais je ne comprends pas chez moi quand je mets des majuscules j'ai des problèmes de Singleton?

    Si jamais on veut garder le 5 pour la fin au lieu de l'inverser comment pourrait t'on procéder? si j'inverse 1 2 3 4 5 j'aurais 5 2 1 4 3,

    J'ai essayé comme ceci accuInv([X], T, [T,X]). mais il me recrée un autre tableau du genre [[3, 4, 1, 2], 5] désolé d'abuser de votre patience

  10. #10
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    accuInv([x],[h|t],r):= accuInv(t,[h|x],r).
    Ben oui, je n'avais pas vu c'est :- pas :=
    Maintenant, quel résultat voulez-vous exactement pour [1,2,3,4] et [1,2,3,4,5]
    "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

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Roh punaise quel débile.... désolé de cette erreur de misérable j'ai toujours l'habitude du "=" dans les lang de prog

    Eh bien si j'ai 1 2 3 4 5 j'aimerais avoir 2 1 4 3 5

  12. #12
    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
    C'est bien ce que je pensais, il faut donc utiliser reverse/2 dans les cas terminaux.
    Il y a une méthode plus simple sans accumulateur.
    "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

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Je suis désolé Trap D, je ne comprends vraiment pas... Reverse/2? j'ai fais quelques recherches et ils utilisent un accumulateur pour reverse/2

  14. #14
    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
    reverse est un prédicat prolog qui inverse les éléments d'une liste : reverse([a,b,c], L) ==> L = [c, b, a].
    Il faut l'utiliser si tu utilises un accumulateur pour réaliser ton exo.
    "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

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup de votre réponse Trap D je vais voir ça

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

Discussions similaires

  1. Distinct Elements dans List<T>
    Par olibara dans le forum C#
    Réponses: 36
    Dernier message: 27/08/2008, 14h26
  2. Random element dans liste sharepoint
    Par spantemonium dans le forum SharePoint
    Réponses: 0
    Dernier message: 10/06/2008, 12h14
  3. Suppression d'un element avec liste chainee
    Par gentil dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 04/10/2007, 14h50
  4. FAQ : Comment alterner les couleurs de chaque élément d'une liste déroulante ?
    Par yoghisan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 04/06/2007, 15h15
  5. Réponses: 5
    Dernier message: 09/05/2006, 16h57

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