Browse thread
[Caml-list] Recursive lists
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ 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