[Kos-dev] Caml : mes debuts

Christophe kos-dev@enix.org
Mon, 19 Nov 2001 19:35:38 +0100


salut,

bon, ton exemple (incomplet) a tout l'air de venir d'un des exemples fournis
avec OCaml et qui s'appelle "demonstr" je crois. Si on regarde leur source,
on trouve prop.mli et prop.ml.

- prop.mli ne présente aucune différence excepté que les mots français sont
accentués ("Réfutation" au lieu de "Refutation").
- prop.ml appelle "open List;;" et non "open Prop" (manque ";;" dans ton
source) et redéfinit les types et exceptions qui se trouvent dans prop.mli.
Il manque aussi la définition de "variables_libres" aussi dans ta version.

J'ai compilé ton source et j'ai trouvé la même chose que toi.
J'ai compilé leur source et ça s'est passé nickel.

Une explication pourrait être que lorsque tu appelles "open Prop;;", tu veux
accéder au module décrit par prop.mli ET implémenté par prop.ml. Or c'est
visiblement pas le cas puisque c'est prop.ml que tu cherches justement à
implémenter. En d'autres termes, tu ne peux appeller "open Module;;" que si
ce module est déjà implémenté.

Soyons clair, je ne suis pas spécialiste en CAML, et ça fait très longtemps
que je n'y ai plus touché, donc je peux me tromper totalement !!!

Hlide.



----- Original Message -----
From: Thomas Petazzoni <thomas.petazzoni@ifrance.com>
To: <kos-dev@enix.org>
Sent: Sunday, November 18, 2001 6:55 PM
Subject: [Kos-dev] Caml : mes debuts


> salut,
>
> je commence a me pencher sur le Caml, et j'ai voulu commencer par simple
> : je recopie un programme du bouquin et je regarde.
>
> J'ai donc commence par recopier le code de l'exemple du chapitre 12 du
> bouquin (le demonstrateur de propositions).
>
> J'ai commence (prop.mli et prop.ml), mais j'ai des problemes de
> compilation. Voici ces deux fichiers, un peu modifie pour que ca
> fonctionne avec ocaml.
>
> (* fichier prop.mli *)
> type proposition =
>   | Vrai
>   | Faux
>   | Non of proposition
>   | Et of proposition * proposition
>   | Ou of proposition * proposition
>   | Implique of proposition * proposition
>   | Equivalent of proposition * proposition
>   | Variable of string;;
>
> exception Refutation of (string * bool) list;;
> val verifie_tautologie: proposition -> string list -> unit;;
> val variables_libres: proposition -> string list -> unit;;
>
> (* fichier prop.ml *)
> open Prop
>
> let rec evalue_dans liaisons = function
>   | Vrai -> true
>   | Faux -> false
>   | Non p -> not (evalue_dans liaisons p)
>   | Et (p,q) -> (evalue_dans liaisons p) && (evalue_dans liaisons q)
>   | Ou (p,q) -> (evalue_dans liaisons p) || (evalue_dans liaisons q)
>   | Implique (p,q) -> (not (evalue_dans liaisons p)) || (evalue_dans
> liaisons q)
>   | Equivalent (p,q) -> evalue_dans liaisons p = evalue_dans liaisons q
>   | Variable v -> List.assoc v liaisons;;
>
> let rec verifie_lignes proposition liaisons variables =
>   match variables with
>   | [] ->
>       if not (evalue_dans liaisons proposition)
>           then raise (Refutation liaisons)
>   | var :: autres ->
>       verifie_lignes proposition ((var,true)::liaisons) autres;
>       verifie_lignes proposition ((var,false)::liaisons) autres;;
>
> let verifie_tautologie proposition variables =
>   verifie_lignes proposition [] variables;;
>
> let rec variables accu proposition =
>   match proposition with
>   | Variable v -> if List.mem v accu then accu else v :: accu
>   | Non p -> variables accu p
>   | Et (p,q) -> variables (variables accu p) q
>   | Ou (p,q) -> variables (variables accu p) q
>   | Implique (p,q) -> variables (variables accu p) q
>   | Equivalent (p,q) -> variables (variables accu p) q
>   | _ -> accu;;
>
>
> Pour compiler :
> ocamlc -c prop.mli (compile sans pb, genere bien le .cmi attendu)
> ocamlc -c prop.ml
> => Boum !
>
> thomas@crazy:~/src/caml/proposition$ ocamlc -c prop.ml
> The implementation prop.ml does not match the interface prop.cmi:
> The field `Refutation' is required but not provided
> The field `proposition' is required but not provided
>
> C'est comme si le machin voulait que j'implemente le type proposition ou
> l'exception Refutation. Je comprends pas ce qu'il veut dire par la. J'ai
> regarde dans la reference de Ocaml, mais j'ai rien trouve :((
>
> Par contre, a noter que je n'ai pas eu besoin de recopier le contenu de
> prop.mli dans prop.ml pour que prop.ml ai connaissance de prop.mli
> (c'est le truc crade qu'on avait decouvert pendant la toussaint).
>
> Help !
>
> thomas
>
>
> PS : pour ceux qui nous lisent, le bouquin dont je parle est Le Langage
> Caml, Pierre Weis et Xavier Leroy, Editions DUNOD, ISBN 2 10 004383 8
> --
> PETAZZONI Thomas
> thomas.petazzoni@meridon.com     UIN : 34937744
> Projet KOS : http://kos.enix.org
> Page Perso : http://www.enix.org/~thomas/
>
>
>
> _______________________________________________
> Kos-dev mailing list
> Kos-dev@doors.enix.org
> http://the-doors.enix.org/cgi-bin/mailman/listinfo/kos-dev
>