Further discussion
→ How can this technique be applied to other data
structures?
Joël Quenneville @joelquen
Slide 72
Slide 72 text
Recursion
Joël Quenneville @joelquen
Slide 73
Slide 73 text
Pseudocode
IF EMPTY
your_base_case
ELSE
RECURSE LEFT
RECURSE RIGHT
your_action
Joël Quenneville @joelquen
Slide 74
Slide 74 text
Abstraction over recursion
fold :
(a -> b -> b -> b) -- action to do recursively
-> b -- base case
-> Tree a -- tree
-> b -- return
Joël Quenneville @joelquen
Slide 75
Slide 75 text
fold
inverseNode -- recursively inverse node
Empty -- base case
tree
Joël Quenneville @joelquen
Slide 76
Slide 76 text
fold : (a -> b -> b -> b) -> b -> Tree a -> b
fold fn baseCase tree =
case tree of
Node val left right ->
fn val
(fold fn baseCase left)
(fold fn baseCase right)
Empty ->
baseCase
Joël Quenneville @joelquen
Slide 77
Slide 77 text
Layers of abstraction
Joël Quenneville @joelquen
Slide 78
Slide 78 text
Further discussion
→ What other abstractions might built on top of
recursion?
Joël Quenneville @joelquen
Slide 79
Slide 79 text
Summary
Joël Quenneville @joelquen
Slide 80
Slide 80 text
3 Perspectives on those args
fold :
(a -> b -> b -> b) -- ???
-> b -- ???
-> Tree a
-> b
Joël Quenneville @joelquen