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

Caml Discussion :

Simplification d'expressions arithmétiques


Sujet :

Caml

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2017
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Simplification d'expressions arithmétiques
    Bonjour à tous,
    J'ai créé un type expr censé représenter quelques expressions arithmétiques que l'on peut rencontrer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    type expr =
      |Var of string
      |Int of int
      |Plus of expr * expr
      |Mult of expr * expr;;
    Je cherche à pouvoir simplifier cette expression, j'y arrive très bien lorsque l'expression ne contient que des entiers mais je rencontre des problèmes à gérer les variables de type string. En effet j'aimerais pouvoir simplifier, par exemple, l'expression suivante : (x * (3 + 4)) en (x * 7). Pouvez-vous m'aidez svp ?
    Merci !

  2. #2
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut Ta fonction de simplification doit être récursive
    À titre d'exemple voici un petit dérivateur formel où la fonction deriv est récursive :
    Code OCaml : 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
     
    type function_x = 
         | X
         | R of float
         | Sin of function_x
         | Cos of function_x
         | Tan of function_x
         | Log of function_x
         | Exp of function_x
         | Power of function_x * float
         | Add of function_x * function_x
         | Mul of function_x * function_x
     
    let factor p = match p with
      | R(1.),u -> u
      | u,v -> Mul(u,v)
     
    let product p = match p with
      | R(a),Mul(R(b),u) -> factor(R(a*.b),u)
      | Mul(R(a),u),R(b) -> factor(R(a*.b),u)
      | Mul(R(a),u),Mul(R(b),v) -> factor(R(a*.b),Mul(u,v))
      | u,Mul(R(k),v) -> Mul(R(k),Mul(u,v))
      | Mul(R(k),u),v -> Mul(R(k),Mul(u,v))
      | u,v -> factor(u,v)
     
    let rec deriv f =
      match f with
      | X -> R(1.)
      | R(k) -> R(0.)
      | Add(u,R(k)) -> deriv(u)
      | Add(u,v)    -> Add(deriv(u),deriv(v))
      | Mul(R(k),X) -> R(k)
      | Mul(R(k),u) -> product(R(k),deriv(u))
      | Mul(u,v)    -> Add(product(deriv(u),v),product(u,deriv(v)))
      | Sin(u) -> product(deriv(u),Cos(u))
      | Cos(u) -> product(R(-1.),product(deriv(u),Sin(u)))
      | Tan(u) -> product(deriv(u),Power(Cos(u),-2.))
      | Log(u) -> product(deriv(u),Power(u,-1.))
      | Exp(u) -> product(deriv(u),Exp(u))
      | Power(u,2.) -> product(R(2.),product(deriv(u),u))
      | Power(u,a)  -> product(R(a),product(deriv(u),Power(u,a-.1.)))

Discussions similaires

  1. Simplification des expressions arithmétiques
    Par Mazmouz125 dans le forum Prolog
    Réponses: 3
    Dernier message: 17/05/2011, 14h16
  2. Réponses: 1
    Dernier message: 09/12/2006, 10h13
  3. Parsing d'expressions arithmétiques
    Par Premium dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 23/08/2006, 15h09
  4. Evaluation d'une expression arithmétique
    Par MysticKhal_0 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 10/03/2006, 18h25
  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