[plt-scheme] self-referential data structures
Stephen Bloch wrote:
> BTW, I just wrote up a Java version of this approach, with methods
> atRightEnd(), atLeftEnd(), getLeft, getRight, insertLeft, insertRight,
> moveLeft, moveRight, removeLeft, and removeRight. It's all purely
> functional, and it all seems to work. And, of course, it takes about
> five times as much code as it would take to do the same thing in Scheme :-)
This structure and the operations you describe are usually called a
zipper [1]. You can build one for any algebraic data type - that is,
trees of every kind as well as lists.
Huet's justification for publishing a paper on it is that it's something
obvious enough to get occasionally reinvented, but not obvious enough
to become folklore. Oh, and it's dead useful. :)
Neil
[1] Gérard Huet. Functional Pearl: The Zipper. JFP 1997.