English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
[Caml-list] Recursion between class and value?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2002-08-19 (02:04)
From: Jacques Garrigue <garrigue@k...>
Subject: Re: [Caml-list] Recursion between class and value?
From: tim@fungible.com (Tim Freeman)
> I'd like to be able to have a class and a function be mutually
> recursive, kind of like this:
>    class foo = object
>      method bar x =
>        if x > 0 then baz (x - 1)
>        else ()
>    end
>    let baz z =
>      if z > 0 then
>        (new foo)#bar (z - 1)
>      else ()

The recursion is between baz and the constructor of foo (not the
type). So this is only a value level problem.

While your solution is ok:
> The best I know how to do is transform baz into a method on foo,
> yielding this:

A simpler one is to make new foo a parameter of baz:

  let baz ~new_foo z = 
    if z > 0 then new_foo#bar (z - 1)

  class foo = object
    method bar x = if x > 0 then baz ~new_foo:(new foo) (x - 1)

  let baz n = baz ~new_foo:(new foo) n

A little heavy, but pretty classical.
An even heavier approach, but maybe more intuitive, is to put baz in
another class, do that you can access foo's constructor.

Jacques Garrigue
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners