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 :

Simplification des expressions arithmétiques


Sujet :

Prolog

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Simplification des expressions arithmétiques
    Bonsoir,
    Voila je dois faire un prog sur PROLOG (version 2.0) qui fais la simplification des expressions arithmétiques par exp : ((a-a) * 332 + (-(-2) + v - k * (4 - (1234 - 1230)) donne 2+v

    mais la j'ai un soucis je bloque sur la façon de débuter les clauses j'ai pensé a isoler les opérateurs dans une liste et les nbr dans une autres mais reste toujours le problème de priorité concernant les parenthèses et les opérateurs bien sure ca aurais pu être facile si on pouvait utiliser directement les opérateurs dans les règles comme sa j'aurais pu mettre plusieurs hypothèses comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CLAUSES
    smpl (X+Y, R) :- number(X), number(Y), !, R is X + Y.  
    smpl (A+X, R) :- number(A), !, smpl(X + A, R). 
    smpl(X + 0, R) :- smpl(X, R). 
    smpl (X*Y, R) :- number(X), number(Y), R is X*Y. 
    smpl (X*A, R) :- number(A), smpl (A*X, R). 
    smpl (1*X, R) :- smpl (X, R). 
    smpl (0*X, 0) :- !. 
    smpl (U*X + V*X, R) :- smpl ((U + V)*X, R). 
    smpl (U*X – V*X, R) :- smpl ((U – V)*X, R). 
    smpl (X – 0, R) :- smpl (X, R).
    mais ça ne marche pas si quelqu'un a une petite idée comment faire ou comment commencer ca serait Génial de votre part
    Merci d'avance .
    Cordialement.

  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
    Je pense que tu devrais mettre ton expression en notation préfixée (par exemple 2 + 3 ==> + 2 3 etc) puis appliquer des règles du style
    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
    simplifier((+, X, Y), R) :-
      simplifier(X, SX),
      simplifier(Y, SY),
      simplifier_1(+, SX, SY, R).
     
    simplifier_1(+ SX, SY, R) :-
      number(SX),
      number(SY), !,
      R is SX + SY.
     
     
    simplifier_1(+ SX, SY, R) :-
      number(SX), !,
      R = (+ ,SX, SY).
     
    simplifier_1(+ SX, SY, R) :-
      number(SY), !,
      R = (+ ,SY, SX).
     
     simplifier_1(+ SX, SY, R) :-
      R = (+ ,SX, SY).
    Ensuite tu écris le résultat final en infixe.
    "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
    Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    Merci pour votre réponse , et je dois faire ces étapes pour touts les opérateurs ? ca marche pour des expression comme celle que j'ai donné comme exemple ? y'a t-il un ordre à suivre ? merci encore.

  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 prendre une grammaire des expressions arithmetiques, on en trouve partout, en plus avec Prolog et les DCG, ça facilite le travail.
    "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

Discussions similaires

  1. Évaluation des expressions arithmétiques
    Par fifi40 dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 08/03/2015, 15h20
  2. Réponses: 1
    Dernier message: 03/01/2007, 15h07
  3. [RegEx] Traduire des "expression régulières" VBA en PHP
    Par jcachico dans le forum Langage
    Réponses: 13
    Dernier message: 19/01/2006, 14h02
  4. Recherche recursive à l'aide des expressions reguliére
    Par titoff dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/12/2005, 16h42
  5. Evaluation/simplification d'expression arithmetique
    Par Premium dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 08/12/2005, 12h19

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