61A Lecture 22 Friday, October 25
Announcements • Midterm 2 is on Monday 10/28 7pm-9pm Topics and locations: http://inst.eecs.berkeley.edu/~cs61a/fa13/exams/midterm2.html Bring 1 hand-written, 2-sided sheet of notes. Two study guides will be provided. Emphasis: mutable data, object-oriented programming, recursion, and recursive data Have an unavoidable conflict? Fill out the conflict form by Friday 10/25 @ 11:59pm! Review session on Saturday 10/26 from 1pm to 4pm in 1 Pimentel HKN review session on Sunday 10/27 from 4pm to 7pm to 2050 VLSB Includes content through Wednesday 10/23 (today is review & examples) • No lab next Monday, Tuesday, & Wednesday • Homework 7 is due Tuesday 11/5 @ 11:59pm (Two weeks) 2
Mutable Recursive Lists
Recursive Lists Can Change Attribute assignment statements can change first and rest attributes of an Rlist. The rest of a recursive list can contain the recursive list as a sub-list. >>> s = Rlist(1, Rlist(2, Rlist(3))) >>> s.first = 5 >>> t = s.rest Global frame First Rest First Rest First Rest 2 3 1 >>> t.rest = s s >>> s.first 5 >>> s.rest.rest.rest.rest.rest.first 2 Global frame Rest Rest First First Note : The actual 5 2 s environment diagram is much more complicated. t 4
Recursive Lists as Functions
Mutable Recursive Lists Using Functions The object system is convenient, but it isn't necessary for designing data types! (Demo) 6
Trees
Pruned Trees Write a function pruned that takes two Tree arguments t1 and t2 and returns whether t2 is a pruned version of t1 . t2 is a pruned version of t1 if all paths from the root of t2 are also valid paths from the root of t1 . 8
Pruned Tree Examples a b c d (a,b) (a,c) (a,d) pruned True True False 9
Recursive Idea a c pruned(a, c) None None implies None None pruned(a.right, c.right) what about c.left? 10
Recursive Idea a d pruned(a, d) None would imply pruned(a.left, d.left) None None Not None 11
Recursive Implementation a b c d Recursive call: Both the left and right are pruned, respectively Base cases: one (or more) of the trees is None def pruned(t1, t2): if t2 is None: return True elif t1 is None: return False else: return pruned(t1.left, t2.left) and pruned(t1.right, t2.right) 12
Non-Local Assignment
Go Bears! Global frame def oski(bear): func oski(bear) oski def cal(berk): func λ (ley) [parent= f2 ] f1 : oski nonlocal bear bear func abs(...) if bear(berk) == 0: cal func cal(berk) [parent= f1 ] Return Value return (berk+1, berk-1) f2 : cal [parent= f1 ] bear = lambda ley: berk-ley berk 2 tuple return (berk, cal(berk)) 1 0 Return Value 2 return cal(2) f3: cal [parent= f1 ] tuple berk 2 oski(abs) 0 1 3 1 Return Value f4: λ [parent= f2 ] ley 2 0 Return Value 14
Non-Local Assignment Variants
Go Bears! Global frame def oski(bear): func oski(bear) oski def cal(berk): func λ (ley) [parent= f2 ] f1 : oski nonlocal bear bear if bear(berk) == 0: cal func cal(berk) [parent= f1 ] abs(2) Return Value return (berk+1, berk-1) boar f2 : cal [parent= f1 ] bear = lambda ley: berk-ley berk 2 tuple return (berk, cal(berk)) 1 0 Return Value 2 return cal(2) f3: cal [parent= f1 ] tuple berk 2 oski(abs) 0 1 3 1 Return Value f4: λ [parent= f2 ] ley 2 0 Return Value 16
Recommend
More recommend