The issue is that this definition can't be generalized to lists of arbitrary size.
The code
let list_cycle l =
 let rec loop = l @ loop in
 loop
will not be accepted.

I don't know the exact rule, but I guess that on the right-hand side of a let rec defining a ground value named foo you can only write a term which evaluates to a finite ground term on the currently defined variables + foo. That is to say something that evaluates to a finite tree of constructors with
constants or defined variables as leaves.
Maybe someone more knowledgeable could state the exact rule.

- marc

P.S. : the code using Obj is far from a solution as it modifies the existing structure
of the list to add cycling and thus, breaks persistency.

Le 23 oct. 2009 à 17:35, Damien Guichard a écrit :


let list_cycle2 a b =
  let rec loop = a::b::loop
  in loop


- damien

En réponse au message
de : Lukasz Stafiniak
du : 2009-10-23 01:10:37
À : caml-list
CC :
Sujet : Re: [Caml-list] forbidden construct as right hand side of "let rec"

While we are at it, what is the best way to convert a "straight" list
into a cyclic list?

i.e. convert

let l = a::b::[]

into

let rec l = a::b::l

(for arbitrary length lists). (The answer I recall from the archives
was using Obj.magic to mutate the [] in the original list).

On Fri, Oct 23, 2009 at 12:34 AM, Stéphane Glondu <st...@glondu.net > wrote:
> Mathias Kende a écrit :
> >       let rec g = f g
>
> What about:
>
>  let rec g x = f g x

_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs
_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Reply via email to