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

[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 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

```