interlude: functional programming cse 331 section 2 james daly
TRANSCRIPT
Reminder
• Homework 2 due• Leave on table before you leave
• Project 2 is out• Covers tree sets• Due next Friday at midnight
• Exam 1 will be Thursday, February 26• Review day the preceding Tuesday.• 1 sheet of notes
Interlude
• Covering something completely different today
• Discussing differences between languages• Focus on a very different way of programming
• Most examples will be in Scala• More available at www.scala-lang.org
Greenspun’s Rule
• “Any sufficiently complicated C or Fortran program contains an ad hoc, informally specified, bug-ridden, slow implementation of half of Common Lisp.”• Phillip Greenspun
Java vs C++
• Garbage collection• No explicit delete calls• Memory cleaned up automatically when object
no longer used• Not cleaned up immediately• Better throughput but worse latency
• Always has smart-pointers (references)• Can’t stack-allocate an object
• Always passes references by value
Programming Paradigms
• C/C++ and many other languages use an imperative paradigm• Focus on how to do something• Change of state
• Procedural programming is a common sub-type• Basis is function calls or sub-routines
• Frequently combined with object-oriented programming
Programming Paradigms
• In functional programming, the focus is on what rather than how• Based on mathematical expressions• Avoids changing state / mutable data• Output depends only on inputs
• Basis for Lisp, Scheme, OCaml, and Haskell
Source: rosettacode.org/Factorial
Functional Ideas
• First-class Functions / Higher-order Functions• Functions can be passes as arguments to other
functions
• Purity• Function calls don’t change state
• Immutable Data• Data structures cannot be modified
• Reference transparency• Function results depend only on its arguments
Immutable Data
• Data elements cannot be modified• Return a modified copy instead
• Con – may have to make extra copies• May have to make “defensive” copies anyway
• Pro – may be able to share some sub-data
• Very good for multi-threading• Don’t need to worry whether your copy is up to
date• Nobody can change the data on you
Purity
• Functions could do things other than return values• Change program state (environment)• Called side effects
• Pure functions have no side-effects
Reference Transparency
• Calling a function with the same arguments yields the same results• So Func(x) = Func(y) if x = y• Not dependent on the environment• Makes it easier to reason about
• Purity and Immutability ensure the environment doesn’t change
Higher Order Functions
• Functions can be passed as arguments to other functions
• Often takes the form of a lambda expression
• Allows us to make small changes to an algorithm without having to rewrite the whole thing
Palindromes
• The empty string is a palindrome• A single character is a palindrome• awa is a palindrome if w is a palindrome• aw and wa are both palindromes if w is a
palindrome and a is a special symbol• Nothing else is a palindrome
Option
• Return type for when calculations can fail• Two sub-classes
• Some• None
• Replaces null• Don’t need to worry about null in other
cases