Browse thread
How to do this properly with OCaml?
-
Thomas Fischbacher
- Christophe Dehlinger
- Berke Durak
- Michel Quercia
- Eric Cooper
-
Michael Alexander Hamburg
-
Xavier Leroy
- Berke Durak
- Michael Alexander Hamburg
- Thomas Fischbacher
- Alex Baretta
- skaller
- Thomas Fischbacher
-
Xavier Leroy
[
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: | Thomas Fischbacher <Thomas.Fischbacher@P...> |
| Subject: | Re: [Caml-list] How to do this properly with OCaml? |
On Sat, 23 Jul 2005, Stephane Glondu wrote: > > What if I have operations that add and remove elements on the heap in > > random order (so that the heap sometimes has to shrink), and I want > > (1) that every element which was removed from the heap and is otherwise > > inaccessible can be reclaimed by GC, > > When you want to "remove" an element, you can put another (random) value > from the same array at its place so that it can be garbage collected. If > the remaining heap is empty (i.e. there is no other value to pick), you > replace the Fill a with Empty n. I think that this will not work. If I duplicate entries to fill up holes, and later on remove a legitimate entry whose duplicates fill holes from the heap, I have to introduce extra bookkeeping so that the other placeholder copies of that entry are replaced as well - otherwise it could not be reclaimed by GC. > > and (2) that removing a single > > element from the heap does not require copying the underlying Array? > > This is a matter of algorithmics, isn't it? To some extent, it is a matter of the type system getting in the way of algorithmics, I fear. -- regards, tf@cip.physik.uni-muenchen.de (o_ Thomas Fischbacher - http://www.cip.physik.uni-muenchen.de/~tf //\ (lambda (n) ((lambda (p q r) (p p q r)) (lambda (g x y) V_/_ (if (= x 0) y (g g (- x 1) (* x y)))) n 1)) (Debian GNU)