Purely Functional Data Structures
Most existing literature on data structures implicitly assumes that such structures be implemented in some imperative programming language like C or C++. It turns out, however, that data structures for these languages do not always translate well to functional languages thus leaving programmers on their own when they need to implement efficient data structures for a particular problem. The book is intended to help those that want to learn more about data structures in functional setting. To do that it presents a number of data structures described from the point of view of functional languages as well as design techniques so that programmers can develop their own functional data structures. All examples in the book are given in Standard ML (translation of most of the examples to Haskell is given in appendix). Chapter 1 of the book serves as an introduction with brief discussion concerning comparison of functional versus imperative data structures, and strict versus lazy evaluation. Also terminology used in the book is explained there. The book is then divided into three parts. The first part consisting of Chapters 2 and 3 provides an introduction to functional data structures. Chapter 2 describes how functional data structures achieve persistence, and Chapter 3 examines some familiar data structures in a functional setting. The second part consisting of Chapters 4-7 concerns the relationship between lazy evaluation and amortization. In Chapter 4 basic concepts of lazy evaluation are briefly reviewed, while Chapter 5 discusses basic techniques of amortization. Chapter 6 describes the role lazy evaluation plays in combining amortization and persistence, and gives two methods for analyzing the amortized cost of data structures implemented with lazy evaluation. In Chapter 7 scheduling -- a technique for converting lazy amortized data structures to worst-case data structures is described. In Chapters 8-11 that form the third part of the book general techniques for designing functional data structures are explored. Chapter 8 describes a lazy variant of global rebuilding technique, so called lazy rebuilding. In Chapter 9 it is suggested that there exists a strong analogy between representations of the number \(n\) and representations of container objects of size \(n\) and that this analogy can be exploited to design new implementations of container abstractions (so called numerical representation). In Chapter 10 data-structural bootstrapping technique is examined while in Chapter 11 a lazy variant of the recursive-slowdown technique, so called implicit recursive slowdown is described. The book represents handy and useful reference for professional programmers working with functional languages. Due to its clear and readable style it can also be used to self-study.
- Loopless Gray code enumeration and the Tower of Bucharest
- Regular numeral systems for data structures
- Deep induction: induction rules for (truly) nested types
- Nested session types
- The most-likely skyline problem for stochastic points
- Type-based cost analysis for lazy functional languages
- Mutable objects in R
- Inductive benchmarking for purely functional data structures
- The role of lazy evaluation in amortized data structures
- Automatic functional correctness proofs for functional search trees
- A Survey of Data Structures in the Bitprobe Model
- Amortized complexity verified
- Pattern matches in HOL: a new representation and improved code generation
- Adaptive lock-free maps: purely-functional to scalable
- APLicative Programming with Naperian Functors
- Balancing weight-balanced trees
- PiStache: implementing -calculus in Scala
- scientific article; zbMATH DE number 1805762 (Why is no real title available?)
- Lightweight semiformal time complexity analysis for purely functional data structures
- Of concurrent data structures and iterations
- Confluently Persistent Tries for Efficient Version Control
- On Polymorphic Recursion, Type Systems, and Abstract Interpretation
- Efficient Type-Checking for Amortised Heap-Space Analysis
- Purely Functional 1-2 Brother Trees
- scientific article; zbMATH DE number 54254 (Why is no real title available?)
- A new method for functional arrays
- The saga of minimum spanning trees
- A theoretical and numerical analysis of the worst-case size of reduced ordered binary decision diagrams
- On constructing 2-3 trees
- Bipartite binomial heaps
- Design and analysis of purely functional programs.
- Derivable type classes
- An overview of Edison
- Numerical representations as purely functional data structures
- Ready, set, verify! Applying hs-to-coq to real-world Haskell code
- Verified Root-Balanced Trees
- Super-naturals
- Denotational semantics as a foundation for cost recurrence extraction for functional languages
- Heterogeneous binary random-access lists
- Linear, bounded, functional pretty-printing
- Calculating a linear-time solution to the densest-segment problem
- Programming with ornaments
- The essence of ornaments
- Towards an Implementation of a Computer Algebra System in a Functional Language
- Proving tree algorithms for succinct data structures
- scientific article; zbMATH DE number 7649972 (Why is no real title available?)
- Two decades of automatic amortized resource analysis
- Type-based analysis of logarithmic amortised complexity
- Making higher-order superposition work
- Fast computations on ordered nominal sets
- Making higher-order superposition work
- scientific article; zbMATH DE number 7779291 (Why is no real title available?)
- Calculating datastructures
- Space-efficient functional offline-partially-persistent trees with applications to planar point location
- Modules in Robinson Spaces
- Implementing the \(\lambda_{GT}\) language: a functional language with graphs as first-class data
- Asymptotic speedup via effect handlers
- Book review of: T. Nipkow (ed.), Functional data structures and algorithms. A proof assistant approach
- Functional data structures and algorithms. A proof assistant approach
- Verifying the correctness and amortized complexity of a union-find implementation in separation logic with time credits
- Amortized complexity verified
- Amortized analysis via coalgebra
- Tail recursion modulo context: an equational approach (extended version)
- Two skew-binary numeral systems and one application
- Experiments on infinite model finding in SMT solving
- A two-level linear dependent type theory
- An incremental algorithm for DLO quantifier elimination via constraint propagation
- ATLAS: automated amortised complexity analysis of self-adjusting data structures
- A principled approach to programming with nested types in Haskell
- Two-tier relaxed heaps
- Confluently persistent tries for efficient version control
This page was built for publication: Purely Functional Data Structures
Report a bug (only for logged in users!)Click here to report a bug for this page (MaRDI item Q4702190)