Bonjour,
Voilà j'essai de comprendre le système de module OCaml.
Tout d'abord j'aimerai connaitre la différence entre
module type E = sig .. end (peut-on écrire module type D = struct .. end)
module E : sig .. end
Pour le moment je souhaite juste compiler l'agencement des modules que j'ai déf.
Assez simples (on passera les erreurs au niveau algorithmique j'ai écris vite sans tester):
Le module Plus:
Signature:
Implémentation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 module type Plus = sig val mplus : int -> int -> int end ;;
Le module Fois:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 module Plus = struct let rec mplus m = function | 0 -> m | n -> 1 + mplus m (n - 1) end ;;
Implémentation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 module type Fois = sig val mfois: int -> int -> int end ;;
Le module Exp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 module Fois = struct let rec mfois n = function | 0 -> 0 | 1 -> n | x -> Plus.mplus n (mfois n (x-1)) end;;
Signature
Implémentation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 module type Exp = sig val mexp: int -> int -> int end ;;
Lorsque je défini les choses de cette façon la boucle d'interaction accepte bien le tout. Mais la compilation échoue
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 module Exp = struct let rec mexp n = function | 0 -> 1 | 1 -> n | x -> Fois.mfois n (mexp n (x - 1)) end;;
Lorsque je définie la signature de cette façon:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 zuymanto$ ocamlc -c plus.ml File "plus.ml", line 1, characters 0-1: Error: The implementation plus.ml does not match the interface plus.cmi: The field `Plus' is required but not provided
Le module Plus compile mais les autres échouent module Plus inconnue ou Plus.mplus non reconnue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 module Plus: sig val mplus : int -> int -> int end ;;
Il semblerait que quelque chose m'échappe. Je souhaite faire de la compilation de programme ocaml et non l'écrire dans la BI. Donc il faut absolument faire compiler et faire interagir mes modules à travers le processus de compilation.
Merci d'avance.
Partager