let rec rechercher_formule table = function | Mot mot -> (try Hashtbl.find table mot with Not_found -> SceneSet.empty) | Et(f1, f2) -> SceneSet.inter (rechercher_formule table f1) (rechercher_formule table f2) | Ou(f1, f2) -> SceneSet.union (rechercher_formule table f1) (rechercher_formule table f2) | Moins(f1, f2) -> SceneSet.diff (rechercher_formule table f1) (rechercher_formule table f2);;
Nous définissons rechercher_formule
par
récurrence sur la structure de la formule. Pas de mystère, c'est une
façon canonique de définir le résultat de l'évaluation d'une formule,
qui pourrait être appliquée à des formules arithmétiques, par exemple.
afficher_scenes (rechercher_formule table (Et(Mot("trouver"), Mot("lorsque")))); print_newline ();;