Version française
Home     About     Download     Resources     Contact us    
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: -- (:)
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 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