FPS: Chapter 28 - 30
This chapter starts us down the functional programming & recursion rabbit hole. Not going to say I’m excited, but I’m willing to suspend some disbelief.
The author clearly had trouble learning recursion. I’m going to take a guess and say he doesn’t come from a traditional CS academic background? Checked on it and the author comes from aerospace! How cool. I think a lot of this will be a refresher for me.
What is recursion? A recursive function is a function that calls itself
Recursion is necessary in functional programming because otherwise you would have to for/while iterate over mutable state, which is a no-no.
Problem with an iterable for loop and mutable state:
- It’s a lot of stuff to keep in our head at once, brain only has so much RAM
- Code doesn’t look like algebra (IMO this is a dumb reason)
- In pure FP there are no var fields, treat them like a crutch.
Let’s look at lists (chapter 30)
For a list in FP, head is the first element and tail is the rest of the elements of the list.
The default Scala list is a linked list.  The last value of a Linked List is a Nil value.  The object of a value and a pointer to the next object is called a cons cell in the Lisp world.
An empty list has one cell with a Nil element.
Side note:
null is an instance of Null, the type.  It extends all types by default.  Nil is an empty singleton of a List element.  The very last element of a list must be a Nil element.
val x = List(1,2,3)
val y = 1 :: 2 :: 2 :: Nil
// x == y in this case, isn't y weird syntax?
// And don't forget, the :: Nil is required by the Scala compiler.
These chapters were pretty basic, the next few will dig into the meat of recursion with functional programming