61A-005-Environments..

61A Lecture 5
Wednesday, September 7
Wednesday, September 7, 2011
Office Hours: You Should Go!
You are not alone!
2
Wednesday, September 7, 2011
Office Hours: You Should Go!
You are not alone!
2
Wednesday, September 7, 2011
Office Hours: You Should Go!
You are not alone!
http://inst.eecs.berkeley.edu/~cs61a/fa11/www/staff.html
2
Wednesday, September 7, 2011
Reminder: Multiple Assignment & Return Values
61Aé003éControl_div.py
"""Functions for exact integer division."""
from operator import floordiv, mod
def divide_exact(n, d):
"""Return the quotient and remainder of dividing n by d.
>>> q, r = divide_exact(13, 5)
>>> q
2
>>> r
3
"""
return floordiv(n, d), mod(n, d)
3
Wednesday, September 7, 2011
Reminder: Multiple Assignment & Return Values
61Aé003éControl_div.py
Integer division,
which rounds down
"""Functions for exact integer division."""
from operator import floordiv, mod
def divide_exact(n, d):
"""Return the quotient and remainder of dividing n by d.
>>> q, r = divide_exact(13, 5)
>>> q
2
>>> r
3
"""
return floordiv(n, d), mod(n, d)
3
Wednesday, September 7, 2011
Reminder: Multiple Assignment & Return Values
61Aé003éControl_div.py
Integer division,
Integer remainder
which rounds down
after dividing
"""Functions for exact integer division."""
from operator import floordiv, mod
def divide_exact(n, d):
"""Return the quotient and remainder of dividing n by d.
>>> q, r = divide_exact(13, 5)
>>> q
2
>>> r
3
"""
return floordiv(n, d), mod(n, d)
3
Wednesday, September 7, 2011
Reminder: Multiple Assignment & Return Values
61Aé003éControl_div.py
Integer division,
Integer remainder
which rounds down
after dividing
"""Functions for exact integer division."""
from operator import floordiv, mod
def divide_exact(n, d):
"""Return the quotient and remainder of dividing n by d.
>>> q, r = divide_exact(13, 5)
>>> q
2
>>> r
3
"""
return floordiv(n, d), mod(n, d)
Multiple return values,
separated by commas
3
Wednesday, September 7, 2011
Reminder: Multiple Assignment & Return Values
61Aé003éControl_div.py
Integer division,
Integer remainder
which rounds down
after dividing
"""Functions for exact integer division."""
from operator import floordiv, mod
def divide_exact(n, d):
"""Return the quotient and remainder of dividing n by d.
>>> q, r = divide_exact(13, 5)
>>> q
2
Multiple assignment
>>> r
to two names
3
"""
return floordiv(n, d), mod(n, d)
Multiple return values,
separated by commas
3
Wednesday, September 7, 2011
The Structure of Project 1
Two functions implement the game simulation
4
Wednesday, September 7, 2011
The Structure of Project 1
Two functions implement the game simulation
Warning!
Pseudo-code
(not code)
4
Wednesday, September 7, 2011
The Structure of Project 1
Two functions implement the game simulation
def play(...):
Warning!
Pseudo-code
(not code)
while game is not over:
get a plan (from the current player's strategy)
call take_turn with a dice and plan
return winner
4
Wednesday, September 7, 2011
The Structure of Project 1
Two functions implement the game simulation
def play(...):
Warning!
Pseudo-code
(not code)
while game is not over:
get a plan (from the current player's strategy)
call take_turn with a dice and plan
return winner
def take_turn(...):
while turn is not over:
get an action (from plan) and outcome (from dice)
call an action
return points scored during the turn
4
Wednesday, September 7, 2011
The Structure of Project 1
Four types of functions are involved in simulating game
Domain
Range
5
Wednesday, September 7, 2011
The Structure of Project 1
Four types of functions are involved in simulating game
Domain
Action
(integer, integer)
Range
(integer, integer, boolean)
5
Wednesday, September 7, 2011
The Structure of Project 1
Four types of functions are involved in simulating game
Domain
Action
(integer, integer)
Range
(integer, integer, boolean)
Two arguments
5
Wednesday, September 7, 2011
The Structure of Project 1
Four types of functions are involved in simulating game
Domain
Action
Range
(integer, integer)
(integer, integer, boolean)
Two arguments
Three return values
5
Wednesday, September 7, 2011
The Structure of Project 1
Four types of functions are involved in simulating game
Domain
Action
Plan
Range
(integer, integer)
(integer, integer, boolean)
Two arguments
Three return values
integer
Action
5
Wednesday, September 7, 2011
The Structure of Project 1
Four types of functions are involved in simulating game
Domain
Action
Range
(integer, integer)
(integer, integer, boolean)
Two arguments
Three return values
Plan
integer
Action
Strategy
(integer, integer)
Plan
5
Wednesday, September 7, 2011
The Structure of Project 1
Four types of functions are involved in simulating game
Domain
Action
Range
(integer, integer)
(integer, integer, boolean)
Two arguments
Three return values
Plan
integer
Action
Strategy
(integer, integer)
Plan
Dice
No arguments
integer
5
Wednesday, September 7, 2011
The Purpose of Higher-Order Functions
6
Wednesday, September 7, 2011
The Purpose of Higher-Order Functions
Functions are first-class: Functions can be manipulated as
values in our programming language.
6
Wednesday, September 7, 2011
The Purpose of Higher-Order Functions
Functions are first-class: Functions can be manipulated as
values in our programming language.
Higher-order function: A function that takes a function as an
argument value or returns a function as a return value
6
Wednesday, September 7, 2011
The Purpose of Higher-Order Functions
Functions are first-class: Functions can be manipulated as
values in our programming language.
Higher-order function: A function that takes a function as an
argument value or returns a function as a return value
Higher-order functions:
6
Wednesday, September 7, 2011
The Purpose of Higher-Order Functions
Functions are first-class: Functions can be manipulated as
values in our programming language.
Higher-order function: A function that takes a function as an
argument value or returns a function as a return value
Higher-order functions:
•
Express general methods of computation
6
Wednesday, September 7, 2011
The Purpose of Higher-Order Functions
Functions are first-class: Functions can be manipulated as
values in our programming language.
Higher-order function: A function that takes a function as an
argument value or returns a function as a return value
Higher-order functions:
•
Express general methods of computation
•
Remove repetition from programs
6
Wednesday, September 7, 2011
The Purpose of Higher-Order Functions
Functions are first-class: Functions can be manipulated as
values in our programming language.
Higher-order function: A function that takes a function as an
argument value or returns a function as a return value
Higher-order functions:
•
Express general methods of computation
•
Remove repetition from programs
•
Separate concerns among functions
6
Wednesday, September 7, 2011
return total
Review:
Summation Example
def identity(k):
return k
def cube(k):
return pow(k, 3)
def summation(n, term):
"""Sum the first n terms of a sequence.
>>> summation(5, cube)
225
"""
total, k = 0, 1
while k <= n:
total, k = total + term(k), k + 1
return total
def pi_term(k):
return 8 / (k * 4 é 3) / (k * 4 é 1)
7
Wednesday, September 7, 2011
return total
Review:
Summation Example
def identity(k):
return k
def cube(k):
return pow(k, 3)
Function of a single
argument (not called term)
def summation(n, term):
"""Sum the first n terms of a sequence.
>>> summation(5, cube)
225
"""
total, k = 0, 1
while k <= n:
total, k = total + term(k), k + 1
return total
def pi_term(k):
return 8 / (k * 4 é 3) / (k * 4 é 1)
7
Wednesday, September 7, 2011
return total
Review:
Summation Example
def identity(k):
return k
def cube(k):
return pow(k, 3)
Function of a single
argument (not called term)
A formal parameter that
term):will be bound to a function
def summation(n,
"""Sum the first n terms of a sequence.
>>> summation(5, cube)
225
"""
total, k = 0, 1
while k <= n:
total, k = total + term(k), k + 1
return total
def pi_term(k):
return 8 / (k * 4 é 3) / (k * 4 é 1)
7
Wednesday, September 7, 2011
return total
Review:
Summation Example
def identity(k):
return k
def cube(k):
return pow(k, 3)
Function of a single
argument (not called term)
A formal parameter that
term):will be bound to a function
def summation(n,
"""Sum the first n terms of a sequence.
>>> summation(5, cube)
225
"""
total, k = 0, 1
while k <= n:
total, k = total + term(k), k + 1
return total
The function bound to term
gets called here
def pi_term(k):
return 8 / (k * 4 é 3) / (k * 4 é 1)
7
Wednesday, September 7, 2011
return total
Review:
Summation Example
def identity(k):
return k
def cube(k):
return pow(k, 3)
Function of a single
argument (not called term)
A formal parameter that
term):will be bound to a function
def summation(n,
"""Sum the first n terms of a sequence.
>>> summation(5, cube)
225
The cube function is passed
"""
as an argument value
total, k = 0, 1
while k <= n:
total, k = total + term(k), k + 1
return total
The function bound to term
gets called here
def pi_term(k):
return 8 / (k * 4 é 3) / (k * 4 é 1)
7
Wednesday, September 7, 2011
return total
Review:
Summation Example
def identity(k):
return k
def cube(k):
return pow(k, 3)
Function of a single
argument (not called term)
A formal parameter that
term):will be bound to a function
def summation(n,
"""Sum the first n terms of a sequence.
>>> summation(5, cube)
225
The cube function is passed
"""
as an argument value
total, k = 0, 1
while k <= n:
total, k = total + term(k), k + 1
return total
The function bound to term
gets called here
def 3pi_term(k):
0 + 1 + 23 + 33 + 43 + 55
return 8 / (k * 4 é 3) / (k * 4 é 1)
7
Wednesday, September 7, 2011
Environments Enable Higher-Order Functions!
Functions as arguments:
Functions as return values:
8
Wednesday, September 7, 2011
Environments Enable Higher-Order Functions!
Functions as arguments:
Our current environment model handles that!
Functions as return values:
8
Wednesday, September 7, 2011
Environments Enable Higher-Order Functions!
Functions as arguments:
Our current environment model handles that!
We'll give an example of how
Functions as return values:
8
Wednesday, September 7, 2011
Environments Enable Higher-Order Functions!
Functions as arguments:
Our current environment model handles that!
We'll give an example of how
Functions as return values:
We need to extend the model a little
8
Wednesday, September 7, 2011
Environments Enable Higher-Order Functions!
Functions as arguments:
Our current environment model handles that!
We'll give an example of how
Functions as return values:
We need to extend the model a little
Functions need to know where they were defined
8
Wednesday, September 7, 2011
Environments Enable Higher-Order Functions!
Functions as arguments:
Our current environment model handles that!
We'll give an example of how
Functions as return values:
We need to extend the model a little
Functions need to know where they were defined
Almost everything stays the same
8
Wednesday, September 7, 2011
Names and Environments with Functional Values
def apply_twice(f, x):
return f(f(x))
def square(x):
return x * x
apply_twice(square, 2)
9
Wednesday, September 7, 2011
Names and Environments with Functional Values
def apply_twice(f, x):
return f(f(x))
def square(x):
return x * x
apply_twice(square, 2)
9
Wednesday, September 7, 2011
Names and Environments with Functional Values
apply_twice:
apply_twice(f, x):
square:
square(x):
return f(f(x))
return x * x
def apply_twice(f, x):
return f(f(x))
def square(x):
return x * x
apply_twice(square, 2)
9
Wednesday, September 7, 2011
Names and Environments with Functional Values
apply_twice:
apply_twice(f, x):
square:
square(x):
return f(f(x))
return x * x
def apply_twice(f, x):
return f(f(x))
apply_twice(square, 2)
def square(x):
return x * x
apply_twice(square, 2)
9
Wednesday, September 7, 2011
Names and Environments with Functional Values
apply_twice:
apply_twice(f, x):
square:
square(x):
return f(f(x))
return x * x
def apply_twice(f, x):
return f(f(x))
apply_twice(square, 2)
def square(x):
return x * x
apply_twice(square, 2)
9
Wednesday, September 7, 2011
Names and Environments with Functional Values
apply_twice:
apply_twice(f, x):
square:
square(x):
return f(f(x))
return x * x
def apply_twice(f, x):
return f(f(x))
apply_twice(square, 2)
def square(x):
return x * x
apply_twice(square, 2)
9
Wednesday, September 7, 2011
Names and Environments with Functional Values
apply_twice:
apply_twice(f, x):
square:
square(x):
return f(f(x))
return x * x
f:
def apply_twice(f, x):
return f(f(x))
apply_twice(square, 2)
def square(x):
return x * x
apply_twice(square, 2)
9
Wednesday, September 7, 2011
Names and Environments with Functional Values
apply_twice:
apply_twice(f, x):
square:
square(x):
return f(f(x))
return x * x
f:
x:
def apply_twice(f, x):
return f(f(x))
2
apply_twice(square, 2)
def square(x):
return x * x
apply_twice(square, 2)
9
Wednesday, September 7, 2011
Names and Environments with Functional Values
apply_twice:
apply_twice(f, x):
square:
square(x):
return f(f(x))
return x * x
f:
x:
def apply_twice(f, x):
return f(f(x))
2
apply_twice(square, 2)
return f(f(x))
def square(x):
return x * x
apply_twice(square, 2)
9
Wednesday, September 7, 2011
Names and Environments with Functional Values
apply_twice:
apply_twice(f, x):
square:
return f(f(x))
square(x):
return x * x
f:
x:
def apply_twice(f, x):
return f(f(x))
2
def square(x):
return x * x
apply_twice(square, 2)
return f(f(x))
2
apply_twice(square, 2)
square
4
9
Wednesday, September 7, 2011
Names and Environments with Functional Values
apply_twice:
apply_twice(f, x):
square:
return f(f(x))
square(x):
return x * x
f:
x:
def apply_twice(f, x):
return f(f(x))
2
def square(x):
return x * x
apply_twice(square, 2)
return f(f(x))
4
square
16
2
apply_twice(square, 2)
square
4
9
Wednesday, September 7, 2011
Names and Environments with Functional Values
apply_twice:
apply_twice(f, x):
square:
return f(f(x))
square(x):
return x * x
f:
x:
def apply_twice(f, x):
return f(f(x))
2
16
apply_twice(square, 2)
def square(x):
return x * x
return f(f(x))
4
square
16
2
apply_twice(square, 2)
square
4
9
Wednesday, September 7, 2011
Applying User-Defined Functions
square:
...
square(x):
return x * x
def square(x):
return x * x
square(-2)
10
Wednesday, September 7, 2011
Applying User-Defined Functions
square:
...
square(x):
return x * x
def square(x):
return x * x
square(-2)
10
Wednesday, September 7, 2011
Applying User-Defined Functions
square:
...
square(x):
The first frame of
the environment in
which the function
was defined
return x * x
def square(x):
return x * x
square(-2)
10
Wednesday, September 7, 2011
Applying User-Defined Functions
square:
...
square(x):
The first frame of
the environment in
which the function
was defined
return x * x
def square(x):
return x * x
square(-2)
10
Wednesday, September 7, 2011
Applying User-Defined Functions
square:
...
square(x):
The first frame of
the environment in
which the function
was defined
return x * x
square(-2)
def square(x):
return x * x
square(-2)
10
Wednesday, September 7, 2011
Applying User-Defined Functions
square:
...
square(x):
The first frame of
the environment in
which the function
was defined
return x * x
x: -2
square
square(-2)
def square(x):
return x * x
square(-2)
10
Wednesday, September 7, 2011
Applying User-Defined Functions
square:
...
square(x):
The first frame of
the environment in
which the function
was defined
return x * x
x: -2
square
square(-2)
def square(x):
return x * x
square(-2)
10
Wednesday, September 7, 2011
Applying User-Defined Functions
square:
...
square(x):
The first frame of
the environment in
which the function
was defined
return x * x
x: -2
square
square(-2)
def square(x):
return x * x
square(-2)
10
Wednesday, September 7, 2011
Applying User-Defined Functions
square:
...
square(x):
The first frame of
the environment in
which the function
was defined
return x * x
x: -2
square
square(-2)
def square(x):
return x * x
square(-2)
10
Wednesday, September 7, 2011
Applying User-Defined Functions
square:
...
square(x):
The first frame of
the environment in
which the function
was defined
return x * x
x: -2
square
square(-2)
return x * x
def square(x):
return x * x
square(-2)
10
Wednesday, September 7, 2011
Applying User-Defined Functions
square:
...
The first frame of
the environment in
which the function
was defined
square(x):
return x * x
x: -2
square
4
square(-2)
return x * x
def square(x):
return x * x
square(-2)
10
Wednesday, September 7, 2011
Functions Associated with the Global Frame
square:
...
square(x):
return x * x
x: -2
square
4
square(-2)
return x * x
def square(x):
return x * x
square(-2)
11
Wednesday, September 7, 2011
Functions Associated with the Global Frame
square:
...
Associated with the
global frame
square(x):
return x * x
x: -2
square
4
square(-2)
return x * x
def square(x):
return x * x
square(-2)
11
Wednesday, September 7, 2011
Functions Associated with the Global Frame
This is the
global frame
square:
...
Associated with the
global frame
square(x):
return x * x
x: -2
square
4
square(-2)
return x * x
def square(x):
return x * x
square(-2)
11
Wednesday, September 7, 2011
Locally Defined Functions: Example
12
Wednesday, September 7, 2011
Locally Defined Functions: Example
Functions defined within other function bodies
are bound to names in the local frame
12
Wednesday, September 7, 2011
"""Sum the first n terms of a sequence.
>>> summation(5, cube)
225 Defined Functions: Example
Locally
"""
total, k = 0, 1
while k <= n:
total,
k = total
+ term(k),
+ 1 function bodies
Functions
defined
within kother
return total
are bound to names in the local frame
def pi_term(k):
return 8 / (k * 4 é 3) / (k * 4 é 1)
# Local function definitions; returning functions
def make_adder(n):
"""Return a function that takes one argument k and returns k + n.
>>> add_three = make_adder(3)
>>> add_three(4)
7
"""
def adder(k):
return k + n
return adder
def compose1(f, g):
"""Return a function that composes f and g.
f, g éé functions of a single argument
"""
def h(x):
return f(g(x))
return h
Wednesday, September 7, 2011
12
"""Sum the first n terms of a sequence.
>>> summation(5, cube)
225 Defined Functions: Example
Locally
"""
total, k = 0, 1
while k <= n:
total,
k = total
+ term(k),
+ 1 function bodies
Functions
defined
within kother
return total
are bound to names in the local frame
def pi_term(k):
return 8 / (k * 4 é 3) / (k * 4 é 1)
A function that
returns a function
# Local function definitions; returning functions
def make_adder(n):
"""Return a function that takes one argument k and returns k + n.
>>> add_three = make_adder(3)
>>> add_three(4)
7
"""
def adder(k):
return k + n
return adder
def compose1(f, g):
"""Return a function that composes f and g.
f, g éé functions of a single argument
"""
def h(x):
return f(g(x))
return h
Wednesday, September 7, 2011
12
"""Sum the first n terms of a sequence.
>>> summation(5, cube)
225 Defined Functions: Example
Locally
"""
total, k = 0, 1
while k <= n:
total,
k = total
+ term(k),
+ 1 function bodies
Functions
defined
within kother
return total
are bound to names in the local frame
def pi_term(k):
return 8 / (k * 4 é 3) / (k * 4 é 1)
A function that
returns a function
# Local function definitions; returning functions
def make_adder(n):
"""Return a function that takes one argument k and returns k + n.
>>> add_three = make_adder(3)
>>> add_three(4)
7
"""
def adder(k):
return k + n
return adder
The name add_three is
bound to a function
def compose1(f, g):
"""Return a function that composes f and g.
f, g éé functions of a single argument
"""
def h(x):
return f(g(x))
return h
Wednesday, September 7, 2011
12
"""Sum the first n terms of a sequence.
>>> summation(5, cube)
225 Defined Functions: Example
Locally
"""
total, k = 0, 1
while k <= n:
total,
k = total
+ term(k),
+ 1 function bodies
Functions
defined
within kother
return total
are bound to names in the local frame
def pi_term(k):
return 8 / (k * 4 é 3) / (k * 4 é 1)
A function that
returns a function
# Local function definitions; returning functions
def make_adder(n):
"""Return a function that takes one argument k and returns k + n.
>>> add_three = make_adder(3)
The name add_three is
>>> add_three(4)
bound to a function
7
"""
def adder(k):
A local
return k + n
def statement
return adder
def compose1(f, g):
"""Return a function that composes f and g.
f, g éé functions of a single argument
"""
def h(x):
return f(g(x))
return h
Wednesday, September 7, 2011
12
"""Sum the first n terms of a sequence.
>>> summation(5, cube)
225 Defined Functions: Example
Locally
"""
total, k = 0, 1
while k <= n:
total,
k = total
+ term(k),
+ 1 function bodies
Functions
defined
within kother
return total
are bound to names in the local frame
def pi_term(k):
return 8 / (k * 4 é 3) / (k * 4 é 1)
A function that
returns a function
# Local function definitions; returning functions
def make_adder(n):
"""Return a function that takes one argument k and returns k + n.
>>> add_three = make_adder(3)
The name add_three is
>>> add_three(4)
bound to a function
7
"""
def adder(k):
A local
return k + n
def statement
return adder
def compose1(f, g):
"""Return a function that composes f and g.
Can refer to names in
the enclosing
function
f, g éé functions
of a single
argument
"""
def h(x):
return f(g(x))
return h
Wednesday, September 7, 2011
12
Locally Defined Functions: Call Expressions
make_adder(1)(2)
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
13
Wednesday, September 7, 2011
Locally Defined Functions: Call Expressions
make_adder(1)(2)
make_adder(1)
(
2
)
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
13
Wednesday, September 7, 2011
Locally Defined Functions: Call Expressions
make_adder(1)(2)
make_adder(1)
(
2
)
Operator
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
13
Wednesday, September 7, 2011
Locally Defined Functions: Call Expressions
make_adder(1)(2)
make_adder(1)
Operator
(
2
)
Operand 0
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
13
Wednesday, September 7, 2011
Locally Defined Functions: Call Expressions
make_adder(1)(2)
make_adder(1)
Operator
(
2
)
Operand 0
An expression
that evaluates
to a function
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
13
Wednesday, September 7, 2011
Locally Defined Functions: Call Expressions
make_adder(1)(2)
make_adder(1)
Operator
An expression
that evaluates
to a function
(
2
)
Operand 0
An expression
that evaluates
to any value
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
13
Wednesday, September 7, 2011
Locally Defined Functions: Environments
make_adder:
make_adder(n):
...
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
14
Wednesday, September 7, 2011
Locally Defined Functions: Environments
make_adder:
make_adder(n):
...
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
make_adder(1)(2)
14
Wednesday, September 7, 2011
Locally Defined Functions: Environments
make_adder:
make_adder(n):
...
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
make_adder(1)(2)
make_adder(1)
14
Wednesday, September 7, 2011
Locally Defined Functions: Environments
make_adder:
n: 1
make_adder(n):
...
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
adder:
make_adder
adder(k):
return k + n
make_adder(1)(2)
make_adder(1)
14
Wednesday, September 7, 2011
Locally Defined Functions: Environments
make_adder:
n: 1
make_adder(n):
...
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
adder:
make_adder
adder(k):
return k + n
Associated with
a local frame
make_adder(1)(2)
make_adder(1)
14
Wednesday, September 7, 2011
Locally Defined Functions: Environments
make_adder:
n: 1
make_adder(n):
...
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
adder:
make_adder
adder(k):
return k + n
Associated with
a local frame
make_adder(1)(2)
make_adder(1)
14
Wednesday, September 7, 2011
Locally Defined Functions: Environments
make_adder:
make_adder(n):
...
n: 1
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
adder:
make_adder
adder(k):
return k + n
Apply
adder
to 2
Associated with
a local frame
make_adder(1)(2)
make_adder(1)
14
Wednesday, September 7, 2011
Locally Defined Functions: Environments
make_adder:
make_adder(n):
...
n: 1
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
adder:
make_adder
adder(k):
return k + n
k: 2
Associated with
a local frame
adder
Apply
adder
to 2
make_adder(1)(2)
return k + n
make_adder(1)
14
Wednesday, September 7, 2011
Locally Defined Functions: Environments
make_adder:
make_adder(n):
...
n: 1
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
adder:
make_adder
adder(k):
return k + n
k: 2
Associated with
a local frame
adder
Apply
adder
to 2
make_adder(1)(2)
return k + n
make_adder(1)
14
Wednesday, September 7, 2011
Locally Defined Functions: Environments
make_adder:
make_adder(n):
...
n: 1
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
adder:
make_adder
adder(k):
return k + n
k: 2
Associated with
a local frame
adder
n
Apply
adder
to 2
make_adder(1)(2)
return k + n
make_adder(1)
14
Wednesday, September 7, 2011
Locally Defined Functions: Environments
make_adder:
make_adder(n):
...
n: 1
def make_adder(n):
def adder(k):
return k + n
return adder
make_adder(1)(2)
adder:
make_adder
adder(k):
return k + n
k: 2
Associated with
a local frame
adder
n
Apply
adder
to 2
3
make_adder(1)(2)
return k + n
make_adder(1)
14
Wednesday, September 7, 2011
The Environment for Function Composition
def compose1(f, g):
def h(x)
return f(g(x))
return h
a1 = make_adder(1)
a2 = make_adder(2)
compose1(a1, a2)(3)
(Demo)
15
Wednesday, September 7, 2011
The Environment for Function Composition
compose1:
make_adder:
...
make_adder(n):
...
def compose1(f, g):
def h(x)
return f(g(x))
return h
a1 = make_adder(1)
a2 = make_adder(2)
compose1(a1, a2)(3)
(Demo)
15
Wednesday, September 7, 2011
The Environment for Function Composition
compose1:
make_adder:
...
make_adder(n):
...
n: 1
adder:
make_adder
adder(k):
def compose1(f, g):
def h(x)
return f(g(x))
return h
a1 = make_adder(1)
a2 = make_adder(2)
compose1(a1, a2)(3)
(Demo)
return k + n
15
Wednesday, September 7, 2011
The Environment for Function Composition
compose1:
make_adder:
a1:
...
make_adder(n):
...
n: 1
adder:
make_adder
adder(k):
def compose1(f, g):
def h(x)
return f(g(x))
return h
a1 = make_adder(1)
a2 = make_adder(2)
compose1(a1, a2)(3)
(Demo)
return k + n
15
Wednesday, September 7, 2011
The Environment for Function Composition
compose1:
make_adder:
a1:
...
make_adder(n):
...
n: 1
adder:
make_adder
adder(k):
def compose1(f, g):
def h(x)
return f(g(x))
return h
a1 = make_adder(1)
a2 = make_adder(2)
compose1(a1, a2)(3)
(Demo)
return k + n
n: 2
adder:
make_adder
adder(k):
return k + n
15
Wednesday, September 7, 2011
The Environment for Function Composition
compose1:
make_adder:
a1:
a2:
...
make_adder(n):
...
n: 1
adder:
make_adder
adder(k):
def compose1(f, g):
def h(x)
return f(g(x))
return h
a1 = make_adder(1)
a2 = make_adder(2)
compose1(a1, a2)(3)
(Demo)
return k + n
n: 2
adder:
make_adder
adder(k):
return k + n
15
Wednesday, September 7, 2011
The Environment for Function Composition
compose1:
make_adder:
a1:
a2:
...
make_adder(n):
...
n: 1
adder:
make_adder
adder(k):
def compose1(f, g):
def h(x)
return f(g(x))
return h
a1 = make_adder(1)
a2 = make_adder(2)
compose1(a1, a2)(3)
(Demo)
return k + n
n: 2
adder:
make_adder
f:
g:
adder(k):
return k + n
compose1
15
Wednesday, September 7, 2011
The Environment for Function Composition
compose1:
make_adder:
a1:
a2:
...
make_adder(n):
...
n: 1
adder:
make_adder
def compose1(f, g):
def h(x)
return f(g(x))
return h
a1 = make_adder(1)
a2 = make_adder(2)
compose1(a1, a2)(3)
adder(k):
(Demo)
return k + n
n: 2
adder:
make_adder
f:
g:
h:
compose1
adder(k):
return k + n
h(x):
return f(g(x))
15
Wednesday, September 7, 2011
The Environment for Function Composition
compose1:
make_adder:
a1:
a2:
...
make_adder(n):
...
n: 1
adder:
make_adder
def compose1(f, g):
def h(x)
return f(g(x))
return h
a1 = make_adder(1)
a2 = make_adder(2)
compose1(a1, a2)(3)
adder(k):
(Demo)
return k + n
n: 2
adder:
make_adder
x: 3
h
f:
g:
h:
compose1
adder(k):
return k + n
h(x):
return f(g(x))
15
Wednesday, September 7, 2011
The Environment for Function Composition
compose1:
make_adder:
a1:
a2:
...
make_adder(n):
...
n: 1
adder:
make_adder
def compose1(f, g):
def h(x)
return f(g(x))
return h
a1 = make_adder(1)
a2 = make_adder(2)
compose1(a1, a2)(3)
adder(k):
(Demo)
return k + n
n: 2
k: 3
adder
adder:
make_adder
x: 3
h
f:
g:
h:
compose1
adder(k):
return k + n
h(x):
return f(g(x))
15
Wednesday, September 7, 2011
The Environment for Function Composition
compose1:
make_adder:
a1:
a2:
...
make_adder(n):
...
n: 1
adder:
make_adder
adder(k):
k: 3
adder
(Demo)
return k + n
k: 5
adder
def compose1(f, g):
def h(x)
return f(g(x))
return h
a1 = make_adder(1)
a2 = make_adder(2)
compose1(a1, a2)(3)
n: 2
adder:
make_adder
x: 3
h
f:
g:
h:
compose1
adder(k):
return k + n
h(x):
return f(g(x))
15
Wednesday, September 7, 2011
Lambda Expressions
16
Wednesday, September 7, 2011
Lambda Expressions
>>> ten = 10
16
Wednesday, September 7, 2011
Lambda Expressions
>>> ten = 10
>>> square = x * x
16
Wednesday, September 7, 2011
Lambda Expressions
>>> ten = 10
An expression: this one
evaluates to a number
>>> square = x * x
16
Wednesday, September 7, 2011
Lambda Expressions
>>> ten = 10
An expression: this one
evaluates to a number
>>> square = x * x
>>> square = lambda x: x * x
16
Wednesday, September 7, 2011
Lambda Expressions
>>> ten = 10
An expression: this one
evaluates to a number
>>> square = x * x
Also an expression:
evaluates to a function
>>> square = lambda x: x * x
16
Wednesday, September 7, 2011
Lambda Expressions
An expression: this one
evaluates to a number
>>> ten = 10
>>> square = x * x
Also an expression:
evaluates to a function
>>> square = lambda x: x * x
A function
16
Wednesday, September 7, 2011
Lambda Expressions
An expression: this one
evaluates to a number
>>> ten = 10
>>> square = x * x
Also an expression:
evaluates to a function
>>> square = lambda x: x * x
A function
with formal parameter x
16
Wednesday, September 7, 2011
Lambda Expressions
An expression: this one
evaluates to a number
>>> ten = 10
>>> square = x * x
Also an expression:
evaluates to a function
>>> square = lambda x: x * x
A function
with formal parameter x
and body "return x * x"
16
Wednesday, September 7, 2011
Lambda Expressions
An expression: this one
evaluates to a number
>>> ten = 10
>>> square = x * x
Also an expression:
evaluates to a function
>>> square = lambda x: x * x
Notice: no "return"
A function
with formal parameter x
and body "return x * x"
16
Wednesday, September 7, 2011
Lambda Expressions
An expression: this one
evaluates to a number
>>> ten = 10
>>> square = x * x
Also an expression:
evaluates to a function
>>> square = lambda x: x * x
Notice: no "return"
A function
with formal parameter x
and body "return x * x"
Must be a single expression
16
Wednesday, September 7, 2011
Lambda Expressions
An expression: this one
evaluates to a number
>>> ten = 10
>>> square = x * x
Also an expression:
evaluates to a function
>>> square = lambda x: x * x
Notice: no "return"
A function
with formal parameter x
and body "return x * x"
>>> square(4)
16
Must be a single expression
16
Wednesday, September 7, 2011
Lambda Expressions
An expression: this one
evaluates to a number
>>> ten = 10
>>> square = x * x
Also an expression:
evaluates to a function
>>> square = lambda x: x * x
Notice: no "return"
A function
with formal parameter x
and body "return x * x"
>>> square(4)
16
Must be a single expression
Lambda expressions are rare in Python, but important in general
16
Wednesday, September 7, 2011
More Higher-Order Function Examples
(Demo)
17
Wednesday, September 7, 2011