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.)))
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

Discussions similaires

  1. Simplification des expressions arithmétiques
    Par Mazmouz125 dans le forum Prolog
    Réponses: 3
    Dernier message: 17/05/2011, 15h16
  2. Réponses: 1
    Dernier message: 09/12/2006, 11h13
  3. Parsing d'expressions arithmétiques
    Par Premium dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 23/08/2006, 16h09
  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, 19h25
  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, 13h19

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