Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
[Caml-list] Recursive lists
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2004-10-08 (14:21)
From: sejourne_kevin <sejourne_kevin@y...>
Subject: Re: [Caml-list] Recursive lists
Luca Pascali wrote:
> Hi everyone.
> I have a little question about the recursive lists.
> In an application I needed to use a list composed by some elements 
> (placed in the head of the list) and recursive element, like
> let rec_list =
>    let rec l2 = 100 :: l2 in
>       [1;2;3;4;5] @ l2
> in order to have the last elements periodically repeated.
> In a list like this, I found that the map function goes in stack 
> overflow. It seems that it is not aware of the recursive characteristics 
> of the input list.
> I had to write a version of the map function to support this in my 
> software (I have to finalize something before posting it).
> My questions are:
> Can some functions of the List library support the use of the recursive 
> lists?
> I mean: can some scanning functions such as map, for_all, exists, mem, 
> filter, and so on understand if they are working on recursive lists and 
> act correctly without going in buffer overflow or infinite loops?
> Did anyone already have a similar needing? And in which way did he/she 
> work?
> Thanks in advance to anyone
> Luca

(** Take a list and connect the end on the beginning
    Copyright : Kévin ;)
let cycle l =
   let rl= ref l in
   let rec go_fin = function
       [] -> invalid_arg "cycle:[] can't be !"
     | [x] as f -> Obj.set_field (Obj.repr f) 1 (Obj.repr !rl);l
     | x::reste-> go_fin reste
   in go_fin l
I haven't test GC issu.

To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: