> I wonder if it is possible to simulate by datatype constructors a
> doubly linked list in OCaml/
In addition to the implementation that Dennis Gang Chen posted, you
might also be interested in the following implementation of circular
doubly linked lists. It's really sweet.
- Xavier Leroy
type 'a cdllist =
{ data: 'a; mutable prev: 'a cdllist; mutable next: 'a cdllist }
let create d =
let rec l = { data = d; prev = l; next = l } in l
let insert_before d list =
let newcons = { data = d; prev = list.prev; next = list } in
list.prev.next <- newcons;
list.prev <- newcons;
newcons
let insert_after list d =
let newcons = { data = d; prev = list; next = list.ext } in
list.next.prev <- newcons;
list.next <- newcons;
newcons
let remove list =
list.prev.next <- list.next;
list.next.prev <- list.prev
let iter f list =
let rec iter_rec l =
f l.data;
if l.next != list then iter_rec l.next
in iter_rec list
This archive was generated by hypermail 2b29 : Fri Apr 28 2000 - 15:22:17 MET DST