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
© Copyright 2026 Paperzz