Slide 1

Slide 1 text

PURELY FUNCTIONAL DATA STRUCTURES BASED ON THE WORK OF CHRIS OKASAKI BY TEJAS BUBANE BANGALORE FUNCTIONAL PROGRAMMING MEETUP https://github.com/tejasbubane/functional-data-structures

Slide 2

Slide 2 text

PURELY FUNCTIONAL ?? ▸Immutable ▸Persistent

Slide 3

Slide 3 text

LINKED LIST data List a = Nil | Cons a (List a)

Slide 4

Slide 4 text

STRUCTURAL SHARING xs ++ ys update xs 2 7

Slide 5

Slide 5 text

QUEUE data Queue a = Queue [a] [a] FIFO

Slide 6

Slide 6 text

BINARY SEARCH TREES data Tree a = Empty | Node (Tree a) a (Tree a) log n

Slide 7

Slide 7 text

PATH COPYING insert ‘e’ xs

Slide 8

Slide 8 text

SKEWED BINARY SEARCH TREES ▸ Depth ~ O(n) ▸ Linear Search Time

Slide 9

Slide 9 text

RED-BLACK TREES data Color = Red | Black data RBTree a = Empty | Node Color (RBTree a) a (RBTree a)

Slide 10

Slide 10 text

RED-BLACK TREES ▸No red node has red child ▸Every path from root to empty node contains same number of black nodes

Slide 11

Slide 11 text

RED-BLACK TREES - INSERTION

Slide 12

Slide 12 text

TRIES

Slide 13

Slide 13 text

ANALYSIS

Slide 14

Slide 14 text

AMORTIZED ANALYSIS data Queue a = Queue [a] [a] check :: [a] -> [a] -> Queue a check [] r = Queue (reverse r) [] check f r = Queue f r Take slowest cost and distribute over faster ones

Slide 15

Slide 15 text

LAZINESS ▸ Evaluate on demand - Thunks ▸ Memoize results

Slide 16

Slide 16 text

BANKERS QUEUES check :: Queue a -> Queue a check q@(Queue lenf fs lenr rs) | lenf <= lenr = Queue (lenf + lenr) (fs ++ reverse rs) 0 [] | otherwise = q No pattern-matching on lists (fs & rs) so no evaluation.

Slide 17

Slide 17 text

THANKS !! QUESTIONS