TD 03 Caml : constructeurs et logique

type connecteur = Et | Ou ;;
type F_formule = Constante of bool
| Variable of int
| Non of F_formule
| c of F_formule*connecteur*F_formule
;;

type G_formule = Un
| Var of int
| Moins_que of G_formule*G_formule
;;

(* Convertit une formule de l’ensemble F dans l’ensemble G
Ensemble F : les connecteurs correspondent à non, ou et et, deux constantes true ou false
Ensemble G : le seul connecteur est <, un constante Un
*)

let rec G_of_F_formule formule = match formule with
| Constante true -> Un
| Constante false -> Moins_que ( Un , Un )
| Variable i -> Var i
| Non f -> Moins_que ( (G_of_F_formule f), Un )
| c (f, Et, g) -> Moins_que( Moins_que(G_of_F_formule f, Un), G_of_F_formule g )
| c (f, Ou, g) -> G_of_F_formule ( Non(c (Non f, Et, Non g)) )
;;

(* Donne l’évaluation d’une formule où les valeurs prises par la ième variable propositionnelle correspond à la ième valeur du tableau de booléens. *)
let rec evalue formule valeurs =
match formule with
| Constante a -> a
| Variable i -> valeurs.(i)
| Non f -> not(evalue f valeurs)
| c(f, Et, g) -> (evalue f valeurs) && (evalue g valeurs)
| c(f, Ou, g) -> (evalue f valeurs) || (evalue g valeurs)
;;

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :