OCaml (option informatique) · Chapitre 8 · Exercice de TD
Évaluer une expression postfixe
Piles, files et tables de hachage · niveau 3 (difficile)
Énoncé
On représente une expression en notation postfixe (polonaise inverse) par une liste de jetons :
type jeton = Nombre of int | Add | Mul
Écrire evalue qui évalue une telle liste à l'aide d'une pile. Exemple : [Nombre 2; Nombre 3; Nombre 4; Mul; Add] vaut .
Corrigé
let evalue jetons =
let p = Stack.create () in
let traite j =
match j with
| Nombre n -> Stack.push n p
| Add -> let b = Stack.pop p in let a = Stack.pop p in Stack.push (a + b) p
| Mul -> let b = Stack.pop p in let a = Stack.pop p in Stack.push (a * b) p
in
List.iter traite jetons;
Stack.pop p
On empile chaque nombre ; à chaque opérateur, on dépile les deux derniers opérandes, on calcule, et on rempile le résultat. À la fin, la pile contient l'unique résultat. C'est le principe d'une calculatrice à pile — et un classique d'usage conjoint des piles (chapitre 8), des types sommes (chapitre 3) et des listes (chapitre 2).
Exercices semblables
- Renverser avec une pile corrigé
- Compter les occurrences corrigé
- Premier doublon corrigé
- Mémoïsation de Fibonacci corrigé
- Le mot le plus fréquent corrigé