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) :

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)
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)) ).

J'avais commencé à écrire une telle fonction, mais je suis bloqué, de plus je pense ne pas utiliser la bonne voie :

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)
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 ?

Merci d'avance !