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 :

afficher un polynome


Sujet :

Prolog

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Points : 41
    Points
    41
    Par défaut afficher un polynome
    Bonjour,

    Je cherche à afficher un polynome de la forme : 1+3x+2x² à l'aide de la liste L=[[1, 0], [3, 1], [2, 3]]. Dans chaque sous-liste, le premier nombre est le coefficient et le deuxième nombre est la puissance du x.
    Mon programme actuel marche mais à la fin il me renvoie true, je ne comprends pas pourquoi !

    Voici un extrait :


    Code prolog : 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
    /*we test if a given variable is a non-empty list*/
    islist([_]).
    islist([_|T]) :- islist(T).
     
     
    /*for the last component*/
    displayBis([[X,X1]]) :-
    	myWrite(X,X1).
     
     
    /*for all the components except the last one*/
    displayBis([[X,X1]|L]):-
    	islist(L),
    	myWrite(X,X1),
    	displayBis(L),
    	!.

    Voici ce que m'affiche l'exécution du programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [debug] 22 ?- displayBis([[1,0],[3,1],[2,3]]).
    1 + 3x + 2x^3
    true.

    Une idée ?

    Merci d'avance,

    Romain

  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
    A cause du cut final, il enlève les backtracks éventuels.
    Fais l'essai en l'enlevant.
    "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 du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Points : 41
    Points
    41
    Par défaut
    J'ai enlevé le dernier cut.
    Voilà ce que ça me donne :

    Code prolog : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    2 ?- displayBis([[1,0],[3,1],[2,3]]).
    1 + 3x + 2x^3
    true ;
    false.
     
     3 ?-

  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
    Oui, qu'est-ce qui te chagrine ?
    true, car le prédicat réussit, false parce qu'il n'y a pas d'autres solutions.
    "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 du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Points : 41
    Points
    41
    Par défaut
    Ben c'est pas que c'est une erreur c'est que je ne voudrais afficher que le résultat, je ne veux pas de faux, pas de vrai.

    Je voudrais quelque chose comme ça :

    Code prolog : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    2 ?- displayBis([[1,0],[3,1],[2,3]]).
    1 + 3x + 2x^3
     
     3 ?-

    C'est possible ?

  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
    Ben non !
    Prolog est extrèmement courtois, il te rend compte du succès ou de l'échec de ses recherches pour répondre à la question posée
    "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 du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Points : 41
    Points
    41
    Par défaut
    Ok, merci pour l'info .

    Résolu !

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour, je suis assez nouveau en Prolog... je voulais savoir comment tu disposes de ta fonction myWrite/2 pour l'affichage de polynome.
    Merci

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Points : 41
    Points
    41
    Par défaut myWrite
    Bonjour,

    Voici la fonction myWrite:
    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
    /*if the coefficient equals zero*/ 
    myWrite(0,P) :- 
    	!, 
    	write(''). 
    /*for the constant*/ 
    myWrite(X,0) :- 
    	!, 
    	write(X). 
     
    /*for the 2d component x^1*/ 
    myWrite(X,1) :- 
    	!, 
    	write(' + '), 
    	write(X), 
           	write('x'). 
     
     
    /*for the "normal" display*/ 
    myWrite(X,P) :- 
    	write(' + '), 
    	write(X), 
    	write('x^'), 
    	write(P).

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

Discussions similaires

  1. afficher du texte
    Par Mau dans le forum OpenGL
    Réponses: 10
    Dernier message: 24/06/2003, 15h31
  2. Réponses: 6
    Dernier message: 10/09/2002, 03h35
  3. Copier et afficher une copie d'ecran
    Par Bobx dans le forum Langage
    Réponses: 6
    Dernier message: 02/08/2002, 22h20
  4. Afficher/Masquer un bouton comme IE 6
    Par benj63 dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/07/2002, 13h12
  5. Réponses: 2
    Dernier message: 10/06/2002, 11h03

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