Purely Functional Data StructuresMost books on data structures assume an imperative language such as C or C++. However, data structures for these languages do not always translate well to functional languages such as Standard ML, Haskell, or Scheme. This book describes data structures from the point of view of functional languages, with examples, and presents design techniques that allow programmers to develop their own functional data structures. The author includes both classical data structures, such as red-black trees and binomial queues, and a host of new data structures developed exclusively for functional languages. All source code is given in Standard ML and Haskell, and most of the programs are easily adaptable to other functional languages. This handy reference for professional programmers working with functional languages can also be used as a tutorial or for self-study. |
Contents
Introduction | 1 |
12 Strict vs Lazy Evaluation | 2 |
13 Terminology | 3 |
14 Approach | 4 |
Persistence | 7 |
22 Binary Search Trees | 11 |
23 Chapter Notes | 15 |
Some Familiar Data Structures in a Functional Setting | 17 |
71 Scheduling | 84 |
72 RealTime Queues | 86 |
73 Binomial Heaps | 89 |
74 BottomUp Mergesort with Sharing | 94 |
75 Chapter Notes | 97 |
Lazy Rebuilding | 99 |
82 Global Rebuilding | 101 |
83 Lazy Rebuilding | 104 |
32 Binomial Heaps | 20 |
33 RedBlack Trees | 24 |
34 Chapter Notes | 29 |
Lazy Evaluation | 31 |
42 Streams | 34 |
43 Chapter Notes | 37 |
Fundamentals of Amortization | 39 |
52 Queues | 42 |
53 Binomial Heaps | 45 |
54 Splay Heaps | 46 |
55 Pairing Heaps | 52 |
56 The Bad News | 54 |
57 Chapter Notes | 55 |
Amortization and Persistence via Lazy Evaluation | 57 |
62 Reconciling Amortization and Persistence | 58 |
63 The Bankers Method | 61 |
64 The Physicists Method | 68 |
65 Lazy Pairing Heaps | 79 |
66 Chapter Notes | 81 |
Eliminating Amortization | 83 |
84 DoubleEnded Queues | 106 |
85 Chapter Notes | 113 |
Numerical Representations | 115 |
91 Positional Number Systems | 116 |
93 Skew Binary Numbers | 130 |
94 Trinary and Quaternary Numbers | 138 |
95 Chapter Notes | 140 |
DataStructural Bootstrapping | 141 |
101 Structural Decomposition | 142 |
102 Structural Abstraction | 151 |
103 Bootstrapping To Aggregate Types | 163 |
104 Chapter Notes | 169 |
Implicit Recursive Slowdown | 171 |
112 Catenable DoubleEnded Queues | 175 |
113 Chapter Notes | 184 |
Haskell Source Code | 185 |
207 | |
217 | |
Other editions - View all
Common terms and phrases
amortized cost APPENDING b₁ b₂ banker's method binary numbers binary random-access lists binary search trees binomial heaps binomial tree bootstrapped catenable constructor D.Queue d₁ d₂ dappendL datatype DEEP f delete deleteMin deque digit Elem Elem.leq Elem.T element end Figure end fun error empty exec exec2 Exercise findMin finite maps force fun head fun insert fun isEmpty fun lazy fun tail functor global rebuilding implementation incremental int x a invariant lazy evaluation LEAF leftist heaps lenf f lenr lenfm let val lookup Tree memoization mergePairs Mergesort node number of debits operation pairing heaps persistence persistent data structures physicist's method r₁ raise EMPTY red-black trees removeMin Tree representation reverse RList root rotation run in O(1 schedule segment segs SHALLOW shared cost signature skew binary Sortable splay trees Standard ML struct susp suspension t₁ t₂ tree of rank TRIE ts₁ ts₂ uncons unshared cost val empty worst-case
Popular passages
Page 208 - Tyng-Ruey Chuang and Benjamin Goldberg. Real-time deques, multihead Turing machines, and purely functional programming. In Conference on Functional Programming Languages and Computer Architecture, pages 289-298, June 1993.
Page 211 - Robert Hood. The Efficient Implementation of Very-High-Level Programming Language Constructs. PhD thesis, Department of Computer Science, Cornell University, August 1982. (Cornell TR 82-503).
Page 208 - F. Warren Burton. An efficient functional implementation of FIFO queues. Information Processing Letters, 14(5):205-206, July 1982.
Page 211 - Rob R. Hoogerwoord. A symmetric set of efficient list operations. Journal of Functional Programming, 2(4):505-513, October 1992. 13. John Hughes. A novel representation of lists and its application to the function "reverse".
Page 207 - F. Warren Burton and Robert D. Cameron. Pattern matching with abstract data types. Journal of Functional Programming, 3(2): 171 - 190, 1993.