Functional Programming Essentials
-
Upload
kelley-robinson -
Category
Engineering
-
view
731 -
download
0
Transcript of Functional Programming Essentials
![Page 1: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/1.jpg)
Functional Programming
Essentials
Engineering Team Lead
@kelleyrobinson
Kelley Robinson
![Page 2: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/2.jpg)
Functional Programming
Essentials
![Page 3: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/3.jpg)
![Page 4: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/4.jpg)
“Standardized” Ladder of Functional Programming
really
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
![Page 5: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/5.jpg)
Functional Programming
Essentials
Engineering Team Lead
@kelleyrobinson
Kelley Robinson
![Page 6: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/6.jpg)
Engineering Team Lead
@kelleyrobinson
Kelley Robinson
![Page 7: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/7.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Essentials
Why this matters
FP In Scala
Origins
![Page 8: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/8.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Essentials
Why this matters
FP In Scala
Origins
![Page 9: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/9.jpg)
Origins
Paradigms
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
![Page 10: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/10.jpg)
How did we get here?
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Origins
![Page 11: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/11.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
“..in the same way that music is not a set of instruments, functional programming is not a set of abstractions that we need to learn and memorize.”
- José Calderón
Origins
![Page 12: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/12.jpg)
The Lambda Calculus Alonzo Church (1930s)
@KELLEYROBINSONFUNCTIONAL PROGRAMMING ESSENTIALS
Origins
![Page 13: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/13.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
λx.x+1
variable
function application
expression
Origins
![Page 14: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/14.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
λx.x+1scala> { x: Int => x + 1 }res1: Int => Int = <function1>
Origins
![Page 15: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/15.jpg)
The Lambda Calculus Alonzo Church (1930s)
Theoretical foundation
Pure functions - no state
Not a programming language
@KELLEYROBINSONFUNCTIONAL PROGRAMMING ESSENTIALS
Origins
![Page 16: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/16.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
![Page 17: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/17.jpg)
“Modern functional languages can be thought of as (nontrivial) embellishments of the lambda calculus”
- Paul Hudak (1989)
![Page 18: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/18.jpg)
Fortran John Backus (1954)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Origins
![Page 19: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/19.jpg)
Logic Theory Machine Newell and Simon (1956)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Origins
![Page 20: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/20.jpg)
Logic Theory Machine Newell and Simon (1956)
IPL (Information Processing
Language)
List processing
Recursion
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Origins
![Page 21: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/21.jpg)
Lisp John McCarthy (1958)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Origins
![Page 22: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/22.jpg)
Functional abstraction
Evolution of Functional Programming An Early History
Higher level languages
List processing & recursion
Lisp popularizes paradigm
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
1930s 1950s
Origins
![Page 23: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/23.jpg)
Paradigms Revisited
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Origins
![Page 24: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/24.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Essentials
Why this matters
FP In Scala
Origins
![Page 25: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/25.jpg)
Recursive Programming TechniquesW.H. Burge (1975)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Essentials
![Page 26: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/26.jpg)
This was before…
Polymorphic Type Inference
Algebraic Data types
Lazy languages
Category-theoretic terminology
Introduction: Burge School of Functional Programming
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
W.H. Burge (1975)
Essentials
![Page 27: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/27.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
ExpressionsExpressions
ExpressionsExpressions
Expressions
Essentials
![Page 28: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/28.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
3x2 + y3x2 + y
Essentials
![Page 29: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/29.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
+ (* (3, square(x)), y)
3x2 + y
operators
operands
Essentials
![Page 30: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/30.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
+ (* (3, square(2)), 1)
for x = 2, y = 1
operators
operands
Essentials
![Page 31: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/31.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
+ (* (3, 4), 1)
operators
operandsfor x = 2, y = 1
Essentials
![Page 32: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/32.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
+ (12, 1)
operators
operandsfor x = 2, y = 1
Essentials
![Page 33: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/33.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
13
for x = 2, y = 1
Essentials
![Page 34: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/34.jpg)
Side Effects Changes outside of function scope
Modifies state
Not predictable
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Essentials
![Page 35: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/35.jpg)
Expressions Instead of statements
Related:
Pure functions
Immutable data
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Essentials
![Page 36: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/36.jpg)
Referential transparency An expression can be replaced by its value without changing the program behavior
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Essentials
![Page 37: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/37.jpg)
Immutable data Avoid modifying state
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Essentials
![Page 38: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/38.jpg)
Expressions The programmer benefits
Understanding
Predictability
Unit testing
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Essentials
![Page 39: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/39.jpg)
Data Structures Constructing and Deconstructing
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Essentials
![Page 40: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/40.jpg)
Data Structures Constructing and Deconstructing
1. How do you make the data?
2. How do you take it apart?
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Essentials
![Page 41: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/41.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
sealed abstract class List[+A]
case class Cons[A](head: A, tail: List[A]) extends List[A]
case object Null extends List[Nothing]
![Page 42: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/42.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
def listFunction(list: List[Int]) = list match { case Cons(x, xs) => // ... something that uses x and xs... case Null => // ... something that can’t use x and xs... }
![Page 43: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/43.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
def length(l: List[Int]): Int = l match { case Cons(x, xs) => 1 + length(xs) case Null => 0 }
![Page 44: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/44.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
def sum(l: List[Int]): Int = l match { case Cons(x, xs) => x + sum(xs) case Null => 0 }
![Page 45: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/45.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
def product(l: List[Int]): Int = l match { case Cons(x, xs) => x * product(xs) case Null => 1 }
![Page 46: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/46.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
def list[A, B](f: (A,B) => B, d: B, xs: List[A]): B = xs match { case Cons(y, ys) => f(y, list(f,d,ys)) case Null => d }
![Page 47: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/47.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
def list[A, B](f: (A,B) => B, d: B, xs: List[A]): B
def length ... = list((_, b) => 1 + b, 0, xs) def sum ... = list((a, b) => a + b, 0, xs)
def product ... = list((a, b) => a * b, 1, xs)
![Page 48: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/48.jpg)
Recursive Programming Techniques W.H. Burge (1975)
Expressions
Data structures
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Essentials
![Page 49: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/49.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
![Page 50: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/50.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Essentials
Why this matters
FP In Scala
Origins
![Page 51: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/51.jpg)
“Standardized” Ladder of Functional Programming
really
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
![Page 52: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/52.jpg)
“Modern” Functional Programming is cluttered with jargon
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Why this matters
![Page 53: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/53.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
![Page 54: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/54.jpg)
“Jargon comes with an inherent cost. It needs to earn its place. (And it often does: jargon is necessary to discuss complex and domain-specific ideas.)”
- Bonnie Eisenman
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON@KELLEYROBINSON
Why this matters
![Page 55: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/55.jpg)
![Page 56: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/56.jpg)
“It is also a striking demonstration of the fact that even definitions of very high quality are often inadequate as sources of information on usage.”
![Page 58: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/58.jpg)
Ladder of Functional Programming
really
“Standardized”**Updated!🙄**
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
![Page 59: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/59.jpg)
Profunctor what?
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Why this matters
![Page 60: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/60.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
“It may be fun to brag about knowing how to use "embedded DSL with combinators," but is that really the best thing to help your startup succeed?”
- Hacker News
Why this matters
![Page 61: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/61.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Jargon is alienating
Why this matters
![Page 62: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/62.jpg)
Please.
Stop.
Saying
This.
Please.
@KELLEYROBINSONFUNCTIONAL PROGRAMMING ESSENTIALS
Why this matters
![Page 63: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/63.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Essentials
Why this matters
FP In Scala
Origins
![Page 64: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/64.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
🙅FP In Scala
![Page 65: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/65.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Storing data val var
Iterating map for loop
pattern matching
procedural statementsDeconstructing data
preferred possible
FP In Scala
![Page 66: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/66.jpg)
What about…? Cats…Scalaz…FREE MONADS!?
Basics are built into Scala
(think `map`, `fold`)
Libraries have other syntactic
sugar
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
FP In Scala
![Page 67: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/67.jpg)
• Have fun
• Promote understanding
• Be kind
@KELLEYROBINSONFUNCTIONAL PROGRAMMING ESSENTIALS
![Page 69: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/69.jpg)
FUNCTIONAL PROGRAMMING ESSENTIALS
Special thanks to • Sharethrough • José Calderón • Heather Miller • Bonnie Eisenman
Resources • Mentioned in this talk:
• Bonnie Eisenman on Scala Jargon • José Calderón's Burge School of Functional Programming • Conception, Evolution, and Application of Functional Programming Languages • Original LambdaConf ladder and Updated LambdaConf ladder • Vocabulary Processes
• Further Reading & Watching: • Functional programming • Lambda calculus • John McCarthy - History of Lisp • Lambda Calculus - Computerphile • Mark Priestley - New Problems, New Paradigms • John Hughes, Mary Sheeran - Keynote: Why Functional Programming Matters
• Vocabulary and Comprehension Research: • The Relationship between Reading Comprehension and Vocabulary Knowledge • The Relationship between Vocabulary Size and Reading Comprehension • Vocabulary and Word Study to Increase Comprehension in Content Areas • Why Vocabulary Instruction Matters • Effects of long-term vocabulary instruction on reading comprehension
@KELLEYROBINSON
![Page 70: Functional Programming Essentials](https://reader036.fdocuments.in/reader036/viewer/2022062306/58f9ad0b760da3da068b9452/html5/thumbnails/70.jpg)
@KELLEYROBINSONFUNCTIONAL PROGRAMMING ESSENTIALSFUNCTIONAL PROGRAMMING ESSENTIALS
Photography credits • Opening image • Solving imaginary scaling issues • Paradigms • Orchestra • Alonzo Church • Philip Wadler • Glitter • Fortran • Chess • A Lisp machine in the MIT Museum • 1975 SNL cast • Side effects • Escher print • Legos • Jargon • Child reading • University • The thinker • Jargon is alienating • Cat typing
@KELLEYROBINSON