Dear All,
I would like to share with you an Ocaml implementation of extensible arrays. The implementation is functional, based on balanced trees (and on the code for Set and Map); I called the module Vec (for vector - I like
short names). You can find it at http://www.dealfaro.com/home/vec.html
Module Vec provides, in log-time:
- Access and modification to arbitrary elements (
Vec.put n el v puts element el in position n of vector v, for instance).
- Concatenation
- Insertion and removal of elements from arbitrary positions (auto-enlarging and auto-shrinking the vector).
as well as:
- All kind of iterators and some visitor functions.
- Efficient translation to/from lists and arrays.
An advantage of Vec over List, for very large data structures, is that iterating over a Vec of size n requires always stack depth bounded by log n: with lists, non-tail-recursive functions can cause stack overflows.
I have been using this data structure for some months, and it has been very handy in a large number of occasions. I hope it can be as useful to you.
I would appreciate all advice and feedback. Also, is there a repository where I should upload it? Do you think it is worth it?
All the best,
Luca