Bonjour,
je suis dans l'idée d'implémenter un petit calculateur d'expression préfixe.
J'ai, pour l'instant, fait un type récursif pour représenter mes expressions, ainsi que la fonction pour l'évaluer et donner le résultat (ces deux ne posent pas de problèmes) :
L'idée est donc de parser un type [Char] (par exemple "+ 9 * 3 1") et de le transformer en type Expr qui pourra être évalué par la fonction 'eval" (pour donner (Add (Num 9) (Mul (Num 3) (Num 1)) ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 data Expr = Num Int | Add Expr Expr | Mul Expr Expr | Div Expr Expr eval (Num x) = x eval (Add (Num a) (Num b)) = a+b eval (Mul (Num a) (Num b)) = a*b eval (Div (Num a) (Num b)) = a `div`b eval (Add a b) = (eval a) + (eval b) eval (Mul a b) = (eval a) * (eval b) eval (Div a b) = (eval a) `div` (eval b)
J'avais commencé à écrire une telle fonction, mais je suis bloqué, de plus je pense ne pas utiliser la bonne voie :
Donc voilà, j'aimerais avoir vos conseils, j'aurais aimé faire la parsing moi-même, mais pensez-vous qu'utiliser un module comme Text.Parsec pourrait être mieux ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 parse :: [Char] -> Expr parse (x:xs:ys) | x == '+' = (Add) (parse xs) (parse ys) | x == '*' = (Mul) (parse xs) (parse ys)
Merci d'avance !
Partager