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 redblack 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 selfstudy. 
What people are saying  Write a review
User ratings
5 stars 
 
4 stars 
 
3 stars 
 
2 stars 
 
1 star 

Review: Purely Functional Data Structures
User Review  Barış Meriç  GoodreadsIt's "the book" on the functional data structures. Read full review
Review: Purely Functional Data Structures
User Review  Daniel Lyons  GoodreadsThis book is for FP what Design Patterns is for OOP. Read through Chapter 3 and functional purity and persistence will become clear. I consider the rest of the book optional advanced reading. Highly recommended. Read full review
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  
Common terms and phrases
a x a amortized cost amortized data structures APPENDING banker's method binary numbers binary randomaccess lists binary search trees binomial heaps binomial tree bootstrapped catenable constructor D.Queue dappendL datatype DEEP f deleteMin deque digit Elem Elem.leq Elem.T element end Figure end fun error empty exec exec2 execute Exercise findMin FINITEMAP force fun head fun insert fun isEmpty fun lazy fun tail functor global rebuilding implementation incremental insTree int x a invariant isEmpty _ lazy evaluation LEAF leftist heaps lenf f lenr lenfm list x a list lookup lookupTree memoization mergePairs Mergesort node number of debits O(log operation pairing heaps persistence persistent data structures physicist's method raise EMPTY redblack trees removeMinTree reverse RList root rotation schedule segment segs SHALLOW shared cost signature skew binary Sortable splay trees Standard ML stream struct susp suspension tree of rank TRIE uncons unconsTree unshared cost update val empty
Popular passages
Page 208  TyngRuey Chuang and Benjamin Goldberg. Realtime deques, multihead Turing machines, and purely functional programming. In Conference on Functional Programming Languages and Computer Architecture, pages 289298, June 1993.
Page 211  Robert Hood. The Efficient Implementation of VeryHighLevel Programming Language Constructs. PhD thesis, Department of Computer Science, Cornell University, August 1982. (Cornell TR 82503).
Page 208  F. Warren Burton. An efficient functional implementation of FIFO queues. Information Processing Letters, 14(5):205206, July 1982.
Page 211  Rob R. Hoogerwoord. A symmetric set of efficient list operations. Journal of Functional Programming, 2(4):505513, 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.