cs61a lecture 3 higher order functions jon kotker and tom magrino uc berkeley eecs june 20, 2012
TRANSCRIPT
![Page 1: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/1.jpg)
CS61A Lecture 3Higher Order Functions
Jon Kotker and Tom MagrinoUC Berkeley EECS
June 20, 2012
![Page 2: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/2.jpg)
2
COMPUTER SCIENCE IN THE NEWSThe (Literal) Evolution of Music
• Scientists from Imperial College London created a computer program powered by Darwinian natural selection.Theory that cultural changes in language, art, and music evolve like living things do, since consumers choose what is “popular”.
• Program would produce loops of random sounds and analyze opinions of musical consumers. The top loops were then “mated”.
• “DarwinTunes” (darwintunes.org) has evolved through at least 2513 generations.
Source: http://www3.imperial.ac.uk/newsandeventspggrp/imperialcollege/newssummary/news_19-6-2012-9-59-1
![Page 3: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/3.jpg)
3
REVIEW
def foo(n): k = 2 while k < n: if n % k == 0: return False k = k + 1 return True
foo(7)? foo(9)? foo(1)?
foo is a metasyntactic variable, or a commonly used nonsense name to denote an arbitary or temporary thing.
Other examples you may see are bar, garply, and baz. Sometimes, om and nom.Or even herp and derp.
This deserves a better name though. Any suggestions?
TRIVIA
![Page 4: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/4.jpg)
4
TODAY
Domain and range of functions... and feeding functions to functions
![Page 5: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/5.jpg)
5
DOMAIN AND RANGE
square(n): return
n*n
Domain is the set of values
that the function is defined for.
Range (or image) is the set of
values that the function returns.
Domain of square: All real numbers.Range of square: All non-negative real numbers.
![Page 6: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/6.jpg)
6
DOMAIN AND RANGE
Remember the domain and range of the functions that you are writing and using!
Many bugs arise because programmers forget what a function can and cannot work with.
The domain and range are especially important when working with higher order functions.
![Page 7: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/7.jpg)
7
PROBLEM: FINDING SQUARES
>>> square_of_0 = 0*0>>> square_of_1 = 1*1>>> square_of_2 = 2*2>>> square_of_3 = 3*3...>>> square_of_65536 = 65536*65536>>> square_of_65537 = 65537*65537...
![Page 8: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/8.jpg)
8
PROBLEM: FINDING SQUARES
>>> square_of_0 = 0*0>>> square_of_1 = 1*1>>> square_of_2 = 2*2>>> square_of_3 = 3*3...>>> square_of_65536 = 65536*65536>>> square_of_65537 = 65537*65537...
There has to be a better way!
![Page 9: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/9.jpg)
9
PROBLEM: FINDING SQUARES
>>> square_of_0 = 0*0>>> square_of_1 = 1*1>>> square_of_2 = 2*2>>> square_of_3 = 3*3...>>> square_of_65536 = 65536*65536>>> square_of_65537 = 65537*65537...
Can we generalize?
![Page 10: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/10.jpg)
10
FINDING SQUARES: GENERALIZATION
def square(n): return n * n
THE SQUARE OF A NUMBER
IS THE NUMBER MULTIPLIED BY ITSELF
![Page 11: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/11.jpg)
11
PROBLEM: SUMS OF SERIESdef sum_of_n_squares(n): ‘‘‘Returns 12 + 22 + 32 + ... + n2.’’’ sum, k = 0, 1 while k <= n: sum, k = sum + square(k), k + 1 return sum
def sum_of_n_cubes(n): ‘‘‘Returns 13 + 23 + 33 + ... + n3.’’’ sum, k = 0, 1 while k <= n: sum, k = sum + cube(k), k + 1 return sum
![Page 12: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/12.jpg)
12
PROBLEM: SUMS OF SERIESfrom math import sin, sqrtdef sum_of_n_sines(n): ‘‘‘Returns sin(1) + sin(2) + sin(3) + ... + sin(n).’’’ sum, k = 0, 1 while k <= n: sum, k = sum + sin(k), k + 1 return sum
def sum_of_n_sqrts(n): ‘‘‘Returns sqrt(1) + sqrt(2) + ... + sqrt(n).’’’ sum, k = 0, 1 while k <= n: sum, k = sum + sqrt(k), k + 1 return sum and so on…
![Page 13: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/13.jpg)
13
PROBLEM: SUMS OF SERIES
and so on…
from math import sin, sqrtdef sum_of_n_sines(n): ‘‘‘Returns sin(1) + sin(2) + sin(3) + ... + sin(n).’’’ sum, k = 0, 1 while k <= n: sum, k = sum + sin(k), k + 1 return sum
def sum_of_n_sqrts(n): ‘‘‘Returns sqrt(1) + sqrt(2) + ... + sqrt(n).’’’ sum, k = 0, 1 while k <= n: sum, k = sum + sqrt(k), k + 1 return sum
There has to be a better way!
![Page 14: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/14.jpg)
14
PROBLEM: SUMS OF SERIESdef sum_of_n_squares(n): sum, k = 0, 1 while k <= n: sum = sum + square(k) k = k + 1 return sum
def sum_of_n_cubes(n): sum, k = 0, 1 while k <= n: sum = sum + cube(k) k = k + 1 return sum
def sum_of_n_sines(n): sum, k = 0, 1 while k <= n: sum = sum + sin(k) k = k + 1 return sum
def sum_of_n_sqrts(n): sum, k = 0, 1 while k <= n: sum = sum + sqrt(k) k = k + 1 return sum
Can we generalize?
![Page 15: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/15.jpg)
15
ANNOUNCEMENTS
• HW2 is released, due Tuesday, June 26.• Discussions earlier held in 320 Soda will now
be held in 310 Soda for the next six weeks. We will move back to 320 Soda for the last two weeks.
• Groups for studying and midterms will be assembled on Thursday, June 21 in discussion section.
![Page 16: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/16.jpg)
16
EVALUATION OF PRIMITIVE EXPRESSIONS
>>> 33>>> x = 5>>> x5>>> ‘CS61A’‘CS61A’
evaluates to
evaluates to
evaluates to
Statement
![Page 17: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/17.jpg)
17
FUNCTION NAMES
>>> square<function square at 0x0000000002279648>
evaluates to
square(n): return
n*n
Python’s representation of square is the
name of the
function, or
“machine”, that
squares its input
Address where the functionis stored in the computer.
It is not fixed.
![Page 18: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/18.jpg)
18
FUNCTION NAMES
>>> square<function square at 0x0000000002279648>>>> cube<function cube at 0x00000000022796C8>>>> max<built-in function max>
Function names are primitive
expressions that evaluate to the corresponding
“machines”
![Page 19: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/19.jpg)
19
USING PRIMITIVE EXPRESSIONS
We have seen primitive expressions used as arguments to functions:
>>> square(3)9>>> x = 4>>> square(x)16
Can we then use function names as arguments?
![Page 20: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/20.jpg)
20
http://boredommagnified.files.wordpress.com/2011/07/challenge-accepted.jpg
![Page 21: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/21.jpg)
21
PROBLEM: SUMS OF SERIESdef sum_of_n_squares(n): sum, k = 0, 1 while k <= n: sum = sum + square(k) k = k + 1 return sum
def sum_of_n_cubes(n): sum, k = 0, 1 while k <= n: sum = sum + cube(k) k = k + 1 return sum
def sum_of_n_sines(n): sum, k = 0, 1 while k <= n: sum = sum + sin(k) k = k + 1 return sum
def sum_of_n_sqrts(n): sum, k = 0, 1 while k <= n: sum = sum + sqrt(k) k = k + 1 return sum
![Page 22: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/22.jpg)
22
FUNCTIONS AS ARGUMENTS
def summation(n, term): sum, k = 0, 1 while k <= n: sum = sum + term(k) k = k + 1 return sum
def sum_of_n_squares(n): return summation(n, square)
term(1) + term(2) + ... + term(n)
![Page 23: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/23.jpg)
23
FUNCTIONS AS ARGUMENTS
def summation(n, term): sum, k = 0, 1 while k <= n: sum = sum + term(k) k = k + 1 return sum
def sum_of_n_squares(n): return summation(n, square)
square
square
![Page 24: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/24.jpg)
24
FUNCTIONS AS ARGUMENTSsquare(n): return
n*n
39
sum, k = 0, 1while k <= n: sum = sum + term(k) k = k + 1return sum
summation(n, term):square(n):
return n*n4,
27summation takes a function as an argument, and is thus a higher order function.
![Page 25: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/25.jpg)
25
HIGHER ORDER FUNCTIONS
http://cdn.memegenerator.net/instances/400x/13712469.jpg
![Page 26: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/26.jpg)
26
HIGHER ORDER FUNCTIONS: PRACTICE
def summation(n, term): sum, k = 0, 1 while k <= n: sum = sum + term(k) k = k + 1 return sum
def sum_of_n_cubes(n): return summation(n, _______________)
def sum_of_n_sines(n): return summation(n, _______________)
def sum_of_n_positive_ints(n): return summation(n, _______________)
![Page 27: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/27.jpg)
27
HIGHER ORDER FUNCTIONS: PRACTICE
def summation(n, term): sum, k = 0, 1 while k <= n: sum = sum + term(k) k = k + 1 return sum
def sum_of_n_cubes(n): return summation(n, lambda x: x ** 3)
def sum_of_n_sines(n): return summation(n, sin)
def sum_of_n_positive_ints(n): return summation(n, lambda x: x)
![Page 28: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/28.jpg)
28
HIGHER ORDER FUNCTIONS
Functions that can take other functions as arguments are considered higher order
functions.
The domains of these functions now include other functions.
Functions can be treated as data!
![Page 29: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/29.jpg)
29
HIGHER ORDER FUNCTIONS: ASIDE
Why “higher order”?
First-order functions only take non-function values, like numbers and strings, as arguments.Second-order functions can take first-order functions as arguments.Third-order functions can take second-order functions as arguments.
… and so on.
![Page 30: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/30.jpg)
30
HOFS ELSEWHERE
∫𝑎
𝑏
𝑓 (𝑥 )𝑑𝑥Integral ∫ is a functionthat takes three arguments:lower limit a, upper limit b,
and a function f
![Page 31: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/31.jpg)
31
HOFS ELSEWHERE
Food
YOU (KIND OF.)are a function (KIND OF.)
Recipe(Function)
Ingredients+
![Page 32: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/32.jpg)
32
HOFS ELSEWHERE
Basketball
NOUN(Data)
Playing
VERB(Function)
Interests: Playing Basketball
NOUN (“Gerund”)(Function as data)
![Page 33: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/33.jpg)
33
FUNCTIONS AS ARGUMENTS
def summation2(n, term, next): sum, k = 0, 1 while k <= n: sum = sum + term(k) k = next(k) return sum
![Page 34: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/34.jpg)
34
FUNCTIONS AS ARGUMENTS: PRACTICE
def summation2(n, term, next): sum, k = 0, 1 while k <= n: sum = sum + term(k) k = next(k) return sum
def summation(n, term): return summation2(n, term, _______________)
![Page 35: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/35.jpg)
35
FUNCTIONS AS ARGUMENTS: PRACTICE
def summation2(n, term, next): sum, k = 0, 1 while k <= n: sum = sum + term(k) k = next(k) return sum
def summation(n, term): return summation2(n, term, lambda x: x + 1)
![Page 36: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/36.jpg)
36
HIGHER ORDER FUNCTIONS: PRACTICE
def summation(n, term): sum, k = 0, 1 while k <= n: sum = sum + term(k) k = k + 1 return sum
def sum_of_n_even(n): ‘‘‘Returns the sum of the first n even numbers.’’’ return summation(n, ________________)
def sum_of_n_odd(n): ‘‘‘Returns the sum of the first n odd numbers.’’’ return summation(n, ________________)
def sum_of_n_starting_from_m(m, n):
‘‘‘Returns the sum of the first n numbers starting from m.’’’ return summation(n, ________________)
![Page 37: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/37.jpg)
37
HIGHER ORDER FUNCTIONS: PRACTICE
def summation(n, term): sum, k = 0, 1 while k <= n: sum = sum + term(k) k = k + 1 return sum
def sum_of_n_even(n): ‘‘‘Returns the sum of the first n even numbers.’’’ return summation(n, lambda x: 2 * x)
def sum_of_n_odd(n): ‘‘‘Returns the sum of the first n odd numbers.’’’ return summation(n, lambda x: 2 * x + 1)
def sum_of_n_starting_from_m(m, n):
‘‘‘Returns the sum of the first n numbers starting from m.’’’ return summation(n, lambda x: x + m)
![Page 38: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/38.jpg)
38
HIGHER ORDER FUNCTIONS: PRACTICE
The value of the derivative of a function at a point can be approximated as
if is really small.
Write the function derivative that takes as arguments a function f, a point x, and a really small value delta_x, and returns the approximate value of the derivative at x.
def deriv(f, x, delta_x): return _______________
![Page 39: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/39.jpg)
39
HIGHER ORDER FUNCTIONS: PRACTICE
The value of the derivative of a function at a point can be approximated as
if is really small.
Write the function derivative that takes as arguments a function f, a point x, and a really small value delta_x, and returns the approximate value of the derivative at x.
def deriv(f, x, delta_x): return (f(x + delta_x) – f(x)) / delta_x
![Page 40: CS61A Lecture 3 Higher Order Functions Jon Kotker and Tom Magrino UC Berkeley EECS June 20, 2012](https://reader036.vdocuments.us/reader036/viewer/2022081516/56649dd45503460f94acc865/html5/thumbnails/40.jpg)
40
CONCLUSION
• It is important to remember the domain and range of functions!
• Functions can take functions as arguments.• Preview: Functions can also return functions.