From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id OAA17264 for caml-redistribution; Tue, 18 Nov 1997 14:54:51 +0100 (MET) Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id OAA17225 for ; Tue, 18 Nov 1997 14:53:00 +0100 (MET) Received: from lri.lri.fr (root@lri.lri.fr [129.175.15.1]) by nez-perce.inria.fr (8.8.7/8.8.5) with ESMTP id OAA03127 for ; Tue, 18 Nov 1997 14:52:58 +0100 (MET) Received: from sun-demons.lri.fr (sun-demons.lri.fr [129.175.8.90]) by lri.lri.fr (8.8.5/jtpda-5.2) with ESMTP id OAA07149 ; Tue, 18 Nov 1997 14:52:15 +0100 (MET) Received: from sun-demons by sun-demons.lri.fr (8.8.4/local) with SMTP id OAA24119 ; Tue, 18 Nov 1997 14:52:14 +0100 (MET) Message-ID: <34719D8E.77FD@lri.fr> Date: Tue, 18 Nov 1997 14:52:14 +0100 From: Emmanuel Engel X-Mailer: Mozilla 3.01Gold (X11; I; SunOS 5.5 sun4u) MIME-Version: 1.0 To: Vyskocil Vladimir CC: Caml list Subject: Re: Modules mutuellement recursifs ? References: <347170C1.F92F478B@math.unice.fr> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: weis Si je comprend bien le but est d'ecrire let rec f x = if x = 0 then 0 else g (x - 1) and g x = if x = 0 then 1 else f (x - 1);; en mettant chacune de ces fonctions dans un module different. Je suis a peut pres sur qu'il n'est pas possible d'ecrire des modules mutuellement recursifs. Sans aller jusqu'a tout mettre directement dans un meme fichier, il est posssible de faire le bricolage suivant (qui peut etre reparti dans plusieurs fichiers dictincts): module M (M1:sig val f: (int -> int) -> int -> int end) (M2:sig val g: (int -> int) -> int -> int end) = struct let rec f' x = M1.f g' x and g' x = M2.g f' x module M1 = struct let f = f' end module M2 = struct let g = g' end end;; module M1' = struct let f g' x = if x = 0 then 0 else g' (x - 1) end;; module M2' = struct let g f' x = if x = 0 then 1 else f' (x - 1);; end;; module MM1M2 = M(M1')(M2');; module M1 = MM1M2.M1;; module M2 = MM1M2.M2;; -- - Emmanuel Engel