61A-002-Functions_1p..

61A Lecture 2
Monday, August 29
Monday, August 29, 2011
The Elements of Programming
2
Monday, August 29, 2011
The Elements of Programming
• Primitive Expressions and Statements
 The simplest building blocks of a language
2
Monday, August 29, 2011
The Elements of Programming
• Primitive Expressions and Statements
 The simplest building blocks of a language
• Means of Combination
 Compound elements are built from simpler ones
2
Monday, August 29, 2011
The Elements of Programming
• Primitive Expressions and Statements
 The simplest building blocks of a language
• Means of Combination
 Compound elements are built from simpler ones
• Means of Abstraction
 Compound elements can be named and manipulated as units
2
Monday, August 29, 2011
The Elements of Programming
• Primitive Expressions and Statements
 The simplest building blocks of a language
• Means of Combination
 Compound elements are built from simpler ones
• Means of Abstraction
 Compound elements can be named and manipulated as units
Programming languages allow us to communicate, too
2
Monday, August 29, 2011
Functions and Data
Data: Stuff we want to manipulate
3
Monday, August 29, 2011
Functions and Data
Data: Stuff we want to manipulate
Functions: Rules for manipulating data
3
Monday, August 29, 2011
Functions and Data
Data: Stuff we want to manipulate
2
Functions: Rules for manipulating data
3
Monday, August 29, 2011
Functions and Data
Data: Stuff we want to manipulate
“The Art of Computer Programming”
2
Functions: Rules for manipulating data
3
Monday, August 29, 2011
Functions and Data
Data: Stuff we want to manipulate
“The Art of Computer Programming”
2
Donald Knuth
Functions: Rules for manipulating data
3
Monday, August 29, 2011
Functions and Data
Data: Stuff we want to manipulate
“The Art of Computer Programming”
2
Donald Knuth
This slide
Functions: Rules for manipulating data
3
Monday, August 29, 2011
Functions and Data
Data: Stuff we want to manipulate
“The Art of Computer Programming”
2
Donald Knuth
This slide
Functions: Rules for manipulating data
Add numbers
3
Monday, August 29, 2011
Functions and Data
Data: Stuff we want to manipulate
“The Art of Computer Programming”
2
Donald Knuth
This slide
Functions: Rules for manipulating data
Count the words in a line of text
Add numbers
3
Monday, August 29, 2011
Functions and Data
Data: Stuff we want to manipulate
“The Art of Computer Programming”
2
Donald Knuth
This slide
Functions: Rules for manipulating data
Count the words in a line of text
Add numbers
Pronounce someone’s name
3
Monday, August 29, 2011
Functions and Data
Data: Stuff we want to manipulate
“The Art of Computer Programming”
2
Donald Knuth
(Ka-NOOTH)
This slide
Functions: Rules for manipulating data
Count the words in a line of text
Add numbers
Pronounce someone’s name
3
Monday, August 29, 2011
Functions and Data
Data: Stuff we want to manipulate
“The Art of Computer Programming”
2
Donald Knuth
(Ka-NOOTH)
This slide
Functions: Rules for manipulating data
Count the words in a line of text
Add numbers
Load the next slide
Pronounce someone’s name
3
Monday, August 29, 2011
Types of expressions
An expression
describes a computation
and evaluates to a value
4
Monday, August 29, 2011
Types of expressions
An expression
describes a computation
and evaluates to a value
18 + 69
4
Monday, August 29, 2011
Types of expressions
An expression
describes a computation
and evaluates to a value
18 + 69
6
23
4
Monday, August 29, 2011
Types of expressions
An expression
describes a computation
and evaluates to a value
18 + 69
6
23
√
3493161
4
Monday, August 29, 2011
Types of expressions
An expression
describes a computation
and evaluates to a value
18 + 69
6
23
sin π
√
3493161
4
Monday, August 29, 2011
Types of expressions
An expression
describes a computation
and evaluates to a value
18 + 69
6
23
sin π
√
3493161
| − 1869|
4
Monday, August 29, 2011
Types of expressions
An expression
describes a computation
and evaluates to a value
18 + 69
| − 1869|
sin π
6
23
100
�
√
3493161
i
i=1
4
Monday, August 29, 2011
Types of expressions
An expression
describes a computation
and evaluates to a value
18 + 69
| − 1869|
sin π
6
23
100
�
i=1
√
i
3493161
�
�
69
18
4
Monday, August 29, 2011
Types of expressions
An expression
describes a computation
and evaluates to a value
18 + 69
f (x)
| − 1869|
sin π
6
23
100
�
i=1
√
i
3493161
�
�
69
18
4
Monday, August 29, 2011
Types of expressions
An expression
describes a computation
and evaluates to a value
18 + 69
f (x)
| − 1869|
sin π
6
23
100
�
i=1
√
i
3493161
�
�
69
18
4
Monday, August 29, 2011
Call Expressions in Python
All expressions can use function call notation
(Demo)
5
Monday, August 29, 2011
Anatomy of a Call Expression
6
Monday, August 29, 2011
Anatomy of a Call Expression
add
(
2
,
3
)
6
Monday, August 29, 2011
Anatomy of a Call Expression
add
(
2
,
3
)
Operator
6
Monday, August 29, 2011
Anatomy of a Call Expression
add
Operator
(
2
Operand 0
,
3
)
Operand 1
6
Monday, August 29, 2011
Anatomy of a Call Expression
add
Operator
(
2
Operand 0
,
3
)
Operand 1
Operators and operands are expressions
6
Monday, August 29, 2011
Anatomy of a Call Expression
add
Operator
(
2
Operand 0
,
3
)
Operand 1
Operators and operands are expressions
So they evaluate to values
6
Monday, August 29, 2011
Anatomy of a Call Expression
add
Operator
(
2
Operand 0
,
3
)
Operand 1
Operators and operands are expressions
So they evaluate to values
Evaluation procedure for call expressions:
6
Monday, August 29, 2011
Anatomy of a Call Expression
add
Operator
(
2
Operand 0
,
3
)
Operand 1
Operators and operands are expressions
So they evaluate to values
Evaluation procedure for call expressions:
1. Evaluate the operator and operand subexpressions
6
Monday, August 29, 2011
Anatomy of a Call Expression
add
Operator
(
2
Operand 0
,
3
)
Operand 1
Operators and operands are expressions
So they evaluate to values
Evaluation procedure for call expressions:
1. Evaluate the operator and operand subexpressions
2. Apply the function that is the value of the operator
subexpression to the arguments that are the values of
the operand subexpression
6
Monday, August 29, 2011
Evaluating Nested Expressions
mul(add(2, mul(4, 6)), add(3, 5))
7
Monday, August 29, 2011
Evaluating Nested Expressions
mul(add(2, mul(4, 6)), add(3, 5))
7
Monday, August 29, 2011
Evaluating Nested Expressions
mul(add(2, mul(4, 6)), add(3, 5))
mul
7
Monday, August 29, 2011
Evaluating Nested Expressions
mul(add(2, mul(4, 6)), add(3, 5))
mul
add(2, mul(4, 6))
7
Monday, August 29, 2011
Evaluating Nested Expressions
mul(add(2, mul(4, 6)), add(3, 5))
mul
add(2, mul(4, 6))
add
7
Monday, August 29, 2011
Evaluating Nested Expressions
mul(add(2, mul(4, 6)), add(3, 5))
mul
add(2, mul(4, 6))
add
2
7
Monday, August 29, 2011
Evaluating Nested Expressions
mul(add(2, mul(4, 6)), add(3, 5))
mul
add(2, mul(4, 6))
add
2
mul(4, 6)
7
Monday, August 29, 2011
Evaluating Nested Expressions
mul(add(2, mul(4, 6)), add(3, 5))
mul
add(2, mul(4, 6))
add
2
mul(4, 6)
mul
4
6
7
Monday, August 29, 2011
Evaluating Nested Expressions
mul(add(2, mul(4, 6)), add(3, 5))
mul
add(2, mul(4, 6))
add
2
24
mul(4, 6)
mul
4
6
7
Monday, August 29, 2011
Evaluating Nested Expressions
mul(add(2, mul(4, 6)), add(3, 5))
mul
26
add(2, mul(4, 6))
add
2
24
mul(4, 6)
mul
4
6
7
Monday, August 29, 2011
Evaluating Nested Expressions
mul(add(2, mul(4, 6)), add(3, 5))
mul
26
add(2, mul(4, 6))
add
2
add(3, 5)
24
mul(4, 6)
mul
4
6
7
Monday, August 29, 2011
Evaluating Nested Expressions
mul(add(2, mul(4, 6)), add(3, 5))
mul
26
add(3, 5)
add(2, mul(4, 6))
add
2
add
24
3
5
mul(4, 6)
mul
4
6
7
Monday, August 29, 2011
Evaluating Nested Expressions
mul(add(2, mul(4, 6)), add(3, 5))
26
8
add(2, mul(4, 6))
add(3, 5)
mul
add
2
add
24
3
5
mul(4, 6)
mul
4
6
7
Monday, August 29, 2011
Evaluating Nested Expressions
208
mul(add(2, mul(4, 6)), add(3, 5))
26
8
add(2, mul(4, 6))
add(3, 5)
mul
add
2
add
24
3
5
mul(4, 6)
mul
4
6
7
Monday, August 29, 2011
The Print Function
(Demo)
8
Monday, August 29, 2011
Pure Functions & Non-Pure Functions
Pure Functions
Non-Pure Functions
9
Monday, August 29, 2011
Pure Functions & Non-Pure Functions
Pure Functions
abs(number):
Non-Pure Functions
9
Monday, August 29, 2011
Pure Functions & Non-Pure Functions
Function signature: how many parameters
Pure Functions
abs(number):
Non-Pure Functions
9
Monday, August 29, 2011
Pure Functions & Non-Pure Functions
Function signature: how many parameters
Pure Functions
-2
abs(number):
Non-Pure Functions
9
Monday, August 29, 2011
Pure Functions & Non-Pure Functions
Function signature: how many parameters
Pure Functions
-2
abs(number):
2
Non-Pure Functions
9
Monday, August 29, 2011
Pure Functions & Non-Pure Functions
Pure Functions
-2
abs(number):
2
Non-Pure Functions
9
Monday, August 29, 2011
Pure Functions & Non-Pure Functions
Pure Functions
-2
abs(number):
2
pow(x, y):
Non-Pure Functions
9
Monday, August 29, 2011
Pure Functions & Non-Pure Functions
Pure Functions
-2
abs(number):
2
2, 100
pow(x, y):
Non-Pure Functions
9
Monday, August 29, 2011
Pure Functions & Non-Pure Functions
Pure Functions
-2
abs(number):
2
2, 100
pow(x, y):
1267650600228229401496703205376
Non-Pure Functions
9
Monday, August 29, 2011
Pure Functions & Non-Pure Functions
Pure Functions
-2
abs(number):
2
2, 100
Only produces
return values
pow(x, y):
1267650600228229401496703205376
Non-Pure Functions
9
Monday, August 29, 2011
Pure Functions & Non-Pure Functions
Pure Functions
-2
abs(number):
2
2, 100
Only produces
return values
pow(x, y):
1267650600228229401496703205376
Non-Pure Functions
print(...):
9
Monday, August 29, 2011
Pure Functions & Non-Pure Functions
Pure Functions
-2
abs(number):
2
2, 100
Only produces
return values
pow(x, y):
1267650600228229401496703205376
Non-Pure Functions
-2
print(...):
9
Monday, August 29, 2011
Pure Functions & Non-Pure Functions
Pure Functions
-2
abs(number):
2
2, 100
Only produces
return values
pow(x, y):
1267650600228229401496703205376
Non-Pure Functions
-2
print(...):
None
9
Monday, August 29, 2011
Pure Functions & Non-Pure Functions
Pure Functions
-2
abs(number):
2
2, 100
Only produces
return values
pow(x, y):
1267650600228229401496703205376
Non-Pure Functions
-2
print(...):
None
display “-2”
9
Monday, August 29, 2011
Pure Functions & Non-Pure Functions
Pure Functions
-2
abs(number):
2
2, 100
Only produces
return values
pow(x, y):
1267650600228229401496703205376
Non-Pure Functions
-2
print(...):
None
May create
side effects
display “-2”
9
Monday, August 29, 2011
Nested Expressions with Print
print(print(1), print(2))
10
Monday, August 29, 2011
Nested Expressions with Print
print(print(1), print(2))
10
Monday, August 29, 2011
Nested Expressions with Print
print(print(1), print(2))
print
10
Monday, August 29, 2011
Nested Expressions with Print
print(print(1), print(2))
print
print(1)
10
Monday, August 29, 2011
Nested Expressions with Print
print(print(1), print(2))
print
print(1)
1
print(...):
None
display “1”
10
Monday, August 29, 2011
Nested Expressions with Print
print(print(1), print(2))
print
None
print(1)
1
print(...):
None
display “1”
10
Monday, August 29, 2011
Nested Expressions with Print
print(print(1), print(2))
print
None
print(2)
print(1)
1
print(...):
None
display “1”
10
Monday, August 29, 2011
Nested Expressions with Print
print(print(1), print(2))
print
None
print(2)
print(1)
1
print(...):
display “1”
None
2
print(...):
None
display “2”
10
Monday, August 29, 2011
Nested Expressions with Print
print(print(1), print(2))
print
1
None
None
print(1)
print(2)
print(...):
display “1”
None
2
print(...):
None
display “2”
10
Monday, August 29, 2011
Nested Expressions with Print
None, None
print(...):
None
display “None None”
print(print(1), print(2))
print
1
None
None
print(1)
print(2)
print(...):
display “1”
None
2
print(...):
None
display “2”
10
Monday, August 29, 2011
Nested Expressions with Print
None, None
print(...):
None
display “None None”
None
print(print(1), print(2))
print
1
None
None
print(1)
print(2)
print(...):
display “1”
None
2
print(...):
None
display “2”
10
Monday, August 29, 2011
Names and Assignment
(Demo)
11
Monday, August 29, 2011
Environments
abs:
...
abs(x):
max:
...
max(a, b, c, ...):
12
Monday, August 29, 2011
Environments
Built-in
function
abs:
...
abs(x):
max:
...
max(a, b, c, ...):
12
Monday, August 29, 2011
Environments
Built-in
function
abs:
...
abs(x):
max:
...
max(a, b, c, ...):
from math import pi
12
Monday, August 29, 2011
Environments
Built-in
function
abs:
...
abs(x):
max:
...
pi:
max(a, b, c, ...):
3.14...
from math import pi
12
Monday, August 29, 2011
Environments
Built-in
function
abs:
...
abs(x):
max:
...
Imported
value
pi:
max(a, b, c, ...):
3.14...
from math import pi
12
Monday, August 29, 2011
Environments
Built-in
function
abs:
...
abs(x):
max:
...
Imported
value
pi:
max(a, b, c, ...):
3.14...
from math import pi
tau = 2 * pi
12
Monday, August 29, 2011
Environments
Built-in
function
abs:
...
abs(x):
max:
...
Imported
value
max(a, b, c, ...):
pi:
3.14...
tau:
6.28...
from math import pi
tau = 2 * pi
12
Monday, August 29, 2011
Environments
Built-in
function
abs:
...
abs(x):
max:
...
Imported
value
Assigned
value
max(a, b, c, ...):
pi:
3.14...
tau:
6.28...
from math import pi
tau = 2 * pi
12
Monday, August 29, 2011
Environments
Built-in
function
abs:
...
abs(x):
max:
...
Imported
value
Assigned
value
max(a, b, c, ...):
pi:
3.14...
tau:
6.28...
from math import pi
tau = 2 * pi
The environment does not track where names came from
12
Monday, August 29, 2011
Environments
abs:
...
abs(x):
max:
...
max(a, b, c, ...):
pi:
3.14...
tau:
6.28...
from math import pi
tau = 2 * pi
The environment does not track where names came from
12
Monday, August 29, 2011
Environments
abs:
abs(x):
...
max:
...
max(a, b, c, ...):
pi:
3.14
tau:
6.28
from math import pi
tau = 2 * pi
The environment does not track where names came from
13
Monday, August 29, 2011
Environments
abs:
A frame holds
name bindings
abs(x):
...
max:
...
max(a, b, c, ...):
pi:
3.14
tau:
6.28
from math import pi
tau = 2 * pi
The environment does not track where names came from
13
Monday, August 29, 2011
Environments
abs:
A frame holds
name bindings
abs(x):
...
max:
...
pi:
tau:
max(a, b, c, ...):
3.14
6.28
Binding to a
numeric value
from math import pi
tau = 2 * pi
The environment does not track where names came from
13
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
14
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
>>> def
14
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
>>> def <name>(<formal parameters>):
14
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
>>> def <name>(<formal parameters>):
return <return expression>
14
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
def expressions:
• Create a new function
• Bind a name to it
>>> def <name>(<formal parameters>):
return <return expression>
14
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
def expressions:
• Create a new function
• Bind a name to it
15
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
def expressions:
• Create a new function
• Bind a name to it
>>> def
15
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
def expressions:
• Create a new function
• Bind a name to it
>>> def square(x):
15
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
def expressions:
• Create a new function
• Bind a name to it
>>> def square(x):
return mul(x, x)
15
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
def expressions:
• Create a new function
• Bind a name to it
>>> def square(x):
return mul(x, x)
15
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
def expressions:
• Create a new function
• Bind a name to it
>>> def square(x):
return mul(x, x)
15
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
def expressions:
• Create a new function
• Bind a name to it
>>> def square(x):
return mul(x, x)
15
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
def expressions:
• Create a new function
• Bind a name to it
square(x):
return mul(x, x)
15
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
def expressions:
• Create a new function
• Bind a name to it
mul:
...
mul(a,b):
square(x):
return mul(x, x)
15
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
def expressions:
• Create a new function
• Bind a name to it
mul:
...
mul(a,b):
square:
square(x):
return mul(x, x)
15
Monday, August 29, 2011
User-Defined Functions
Named values are a simple means of abstraction
Named expressions are a more powerful means of abstraction
def expressions:
• Create a new function
• Bind a name to it
mul:
...
mul(a,b):
square:
square(x):
return mul(x, x)
(Demo)
15
Monday, August 29, 2011
Calling User-Defined Functions
mul:
...
mul(a,b):
square:
square(x):
return mul(x, x)
from operator import mul
def square(x):
return mul(x, x)
16
Monday, August 29, 2011
Calling User-Defined Functions
mul:
...
mul(a,b):
square:
square(x):
return mul(x, x)
from operator import mul
def square(x):
return mul(x, x)
16
Monday, August 29, 2011
Calling User-Defined Functions
mul:
...
mul(a,b):
square:
square(x):
return mul(x, x)
from operator import mul
def square(x):
return mul(x, x)
square(-2)
17
Monday, August 29, 2011
Calling User-Defined Functions
• Bind formal parameters
• Eval return expression
mul:
...
mul(a,b):
square:
square(x):
return mul(x, x)
from operator import mul
def square(x):
return mul(x, x)
square(-2)
17
Monday, August 29, 2011
Calling User-Defined Functions
• Bind formal parameters
• Eval return expression
mul:
...
mul(a,b):
square:
Environments
& Values
square(x):
return mul(x, x)
Expressions
from operator import mul
def square(x):
return mul(x, x)
square(-2)
17
Monday, August 29, 2011
Calling User-Defined Functions
• Bind formal parameters
• Eval return expression
mul:
...
mul(a,b):
square:
Environments
& Values
square(x):
return mul(x, x)
square(-2)
Expressions
from operator import mul
def square(x):
return mul(x, x)
square(-2)
17
Monday, August 29, 2011
Calling User-Defined Functions
• Bind formal parameters
• Eval return expression
mul:
...
mul(a,b):
square:
Environments
& Values
square(x):
return mul(x, x)
square(-2)
Expressions
from operator import mul
def square(x):
return mul(x, x)
square(-2)
17
Monday, August 29, 2011
Calling User-Defined Functions
• Bind formal parameters
• Eval return expression
mul:
...
mul(a,b):
square:
Environments
& Values
square(x):
return mul(x, x)
Expressions
square
square(-2)
from operator import mul
def square(x):
return mul(x, x)
square(-2)
17
Monday, August 29, 2011
Calling User-Defined Functions
• Bind formal parameters
• Eval return expression
mul:
...
mul(a,b):
square:
Environments
& Values
square(x):
return mul(x, x)
Expressions
x: -2
square
square(-2)
from operator import mul
def square(x):
return mul(x, x)
square(-2)
17
Monday, August 29, 2011
Calling User-Defined Functions
• Bind formal parameters
• Eval return expression
mul:
...
mul(a,b):
square:
Environments
& Values
square(x):
return mul(x, x)
Expressions
x: -2
square
square(-2)
return mul(x, x)
from operator import mul
def square(x):
return mul(x, x)
square(-2)
17
Monday, August 29, 2011
Calling User-Defined Functions
• Bind formal parameters
• Eval return expression
mul:
...
mul(a,b):
square:
Environments
& Values
square(x):
return mul(x, x)
Expressions
x: -2
square
4
square(-2)
return mul(x, x)
from operator import mul
def square(x):
return mul(x, x)
square(-2)
17
Monday, August 29, 2011
Calling User-Defined Functions
The existing environment in which
the call expression is evaluated
The environment
created for the
function body
4
square(-2)
return mul(x, x)
from operator import mul
def square(x):
return mul(x, x)
square(-2)
18
Monday, August 29, 2011
Calling User-Defined Functions
mul:
...
mul(a,b):
square:
square(x):
return mul(x, x)
x: -2
square
4
square(-2)
return mul(x, x)
from operator import mul
def square(x):
return mul(x, x)
square(-2)
19
Monday, August 29, 2011
Evaluating a Name in an Environment
mul:
...
mul(a,b):
square:
square(x):
return mul(x, x)
x: -2
square
return mul(x, x)
20
Monday, August 29, 2011
Evaluating a Name in an Environment
mul:
...
mul(a,b):
square:
square(x):
return mul(x, x)
x: -2
square
Points to an environment,
which starts with a frame
return mul(x, x)
20
Monday, August 29, 2011
Evaluating a Name in an Environment
mul:
...
mul(a,b):
square:
A name evaluates
to the value
bound to that
name
square(x):
return mul(x, x)
x: -2
square
Points to an environment,
which starts with a frame
return mul(x, x)
20
Monday, August 29, 2011
Evaluating a Name in an Environment
mul:
...
mul(a,b):
square:
square(x):
return mul(x, x)
x: -2
square
Points to an environment,
which starts with a frame
A name evaluates
to the value
bound to that
name
...in the
earliest frame
of the current
environment
return mul(x, x)
20
Monday, August 29, 2011
Evaluating a Name in an Environment
mul:
...
mul(a,b):
square:
square(x):
return mul(x, x)
x: -2
square
Points to an environment,
which starts with a frame
A name evaluates
to the value
bound to that
name
...in the
earliest frame
of the current
environment
...in which that
name is found
return mul(x, x)
20
Monday, August 29, 2011
Evaluating a Name in an Environment
mul:
...
mul(a,b):
square:
square(x):
return mul(x, x)
x: -2
square
Points to an environment,
which starts with a frame
A name evaluates
to the value
bound to that
name
...in the
earliest frame
of the current
environment
...in which that
name is found
return mul(x, x)
20
Monday, August 29, 2011
Intrinsic Function Names Don’t Play a Role
mul:
...
mul(a,b):
square:
square(x):
return mul(x, x)
x: -2
square
return mul(x, x)
21
Monday, August 29, 2011
Intrinsic Function Names Don’t Play a Role
mul:
...
Does not get
inspected
mul(a,b):
square:
square(x):
return mul(x, x)
x: -2
square
return mul(x, x)
21
Monday, August 29, 2011
Intrinsic Function Names Don’t Play a Role
mul:
...
Does not get
inspected
mul(a,b):
square:
square(x):
return mul(x, x)
x: -2
Witness
Protection
Program
square
return mul(x, x)
21
Monday, August 29, 2011
Intrinsic Function Names Don’t Play a Role
mul:
...
Does not get
inspected
mul(a,b):
square:
square(x):
return mul(x, x)
x: -2
Witness
Protection
Program
square
return mul(x, x)
Functions aren’t
accessed by their
intrinsic names!
(Demo)
21
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
add, mul, ...
square(x):
return mul(x, x)
sum_squares(x, y):
return add(square(x), square(y))
def square(x):
return mul(x,x)
def sum_squares(x, y):
return add(square(x),square(y))
22
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
add, mul, ...
square(x):
return mul(x, x)
sum_squares(x, y):
return add(square(x), square(y))
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
23
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
add, mul, ...
square(x):
return mul(x, x)
sum_squares(x, y):
return add(square(x), square(y))
sum_squares(5,12)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
23
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
add, mul, ...
square(x):
return mul(x, x)
sum_squares(x, y):
return add(square(x), square(y))
sum_squares(5,12)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
23
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
add, mul, ...
square(x):
return mul(x, x)
sum_squares(x, y):
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
23
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
add, mul, ...
x: 5
y: 12
square(x):
return mul(x, x)
sum_squares(x, y):
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
23
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
add, mul, ...
x: 5
y: 12
square(x):
return mul(x, x)
sum_squares(x, y):
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
add(square(x),square(y))
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
23
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
add(square(x),square(y))
return
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
23
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
add, mul, ...
A
x: 5
y: 12
square(x):
return mul(x, x)
sum_squares(x, y):
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
A add(square(x),square(y))
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
24
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
add, mul, ...
A
x: 5
y: 12
square(x):
return mul(x, x)
sum_squares(x, y):
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
A add(square(x),square(y))
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
25
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
A add(square(x),square(y))
square(x)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
25
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
A add(square(x),square(y))
A
square(x)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
25
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
A add(square(x),square(y))
A
square(x)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
25
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
A add(square(x),square(y))
square
A
square(x)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
25
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
A add(square(x),square(y))
x:
square
A
square(x)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
25
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
A add(square(x),square(y))
x: 5
square
A
square(x)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
25
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
A add(square(x),square(y))
x: 5
square
A
square(x)
mul(x, x)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
25
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
A add(square(x),square(y))
x: 5
square
A
25
square(x)
mul(x, x)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
25
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
A add(square(x),square(y))
x: 5
square
A
25
square(x)
mul(x, x)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
26
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
A add(square(x),square(y))
x: 5
square
A
25
square(x)
mul(x, x)
square(y)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
26
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
A add(square(x),square(y))
x: 5
square
A
25
square(x)
mul(x, x)
A
square(y)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
26
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
A add(square(x),square(y))
x: 5
square
A
25
square(x)
mul(x, x)
A
square(y)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
26
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
sum_squares(5,12)
square
A add(square(x),square(y))
x: 5
square
A
25
square(x)
mul(x, x)
A
square(y)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
26
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
x:
sum_squares(5,12)
square
A add(square(x),square(y))
x: 5
square
A
25
square(x)
mul(x, x)
A
square(y)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
26
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
x: 12
square
sum_squares(5,12)
A add(square(x),square(y))
x: 5
square
A
25
square(x)
mul(x, x)
A
square(y)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
26
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
x: 12
square
sum_squares(5,12)
A add(square(x),square(y))
x: 5
square
A
25
square(x)
mul(x, x)
A
square(y)
mul(x, x)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
26
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
x: 12
square
sum_squares(5,12)
A add(square(x),square(y))
x: 5
square
A
25
square(x)
mul(x, x)
A
144
square(y)
mul(x, x)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
26
Monday, August 29, 2011
Example: Function Application
square:
sum_squares:
square(x):
add, mul, ...
A
return mul(x, x)
sum_squares(x, y):
x: 5
y: 12
return add(square(x), square(y))
sum_squares
169
x: 12
square
sum_squares(5,12)
A add(square(x),square(y))
x: 5
square
A
25
square(x)
mul(x, x)
A
144
square(y)
mul(x, x)
def square(x):
return mul(x,x)
def sum_squares(x,y):
return add(...)
sum_squares(5, 12)
26
Monday, August 29, 2011