Version française
Home     About     Download     Resources     Contact us    
Browse thread
Modules mutuellement recursifs ?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Emmanuel Engel <Emmanuel.Engel@l...>
Subject: Re: Modules mutuellement recursifs ?
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