Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
* Modules mutuellement recursifs ?
@ 1997-11-18 10:41 Vyskocil Vladimir
  1997-11-18 13:52 ` Emmanuel Engel
  0 siblings, 1 reply; 2+ messages in thread
From: Vyskocil Vladimir @ 1997-11-18 10:41 UTC (permalink / raw)
  To: Caml list

Bonjour,

Est t'il possible de compiler des modules qui s'appelent mutuellement
en creant par exemple un module reunion ?

Soit

M1.ml :
let f x = if x = 0 then 0 else M2.g (x - 1)

M2.ml
let g x = if x = 0 then 1 else M1.f (x - 1)

Comment transformer ce petit exemple (en utilisant des foncteurs ?)
pour creer un module M qui donne acces aux fonctions M1.f et M2.g ?
(la solution triviale de tout mettre dans un seul fichier n'est pas
tres satisfaisante :)

				Merci par avance
 
-- 
Vyskocil Vladimir
vyskocil@math.unice.fr
http://pcmath65.unice.fr/~vyskocil
http://www.inria.fr/safir/WHOSWHO/Vladimir.html





^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Modules mutuellement recursifs ?
  1997-11-18 10:41 Modules mutuellement recursifs ? Vyskocil Vladimir
@ 1997-11-18 13:52 ` Emmanuel Engel
  0 siblings, 0 replies; 2+ messages in thread
From: Emmanuel Engel @ 1997-11-18 13:52 UTC (permalink / raw)
  To: Vyskocil Vladimir; +Cc: Caml list

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




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~1997-11-18 13:54 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1997-11-18 10:41 Modules mutuellement recursifs ? Vyskocil Vladimir
1997-11-18 13:52 ` Emmanuel Engel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox