This preview has intentionally blurred sections. Sign up to view the full version.View Full Document
Unformatted text preview: Module 5 Mutation and imperative languages Because sometimes things change CS 116: Introduction to Computer Science 2 Daniel G. Brown/Troy Vasiga, University of Waterloo 5.1 Purpose of Module 5 • Mutation: changing variables • Imperative languages: a different kind of programming • Mutation of structures • Readings: HtDP 34, 35, 36, 40.3, 40.5, 41.1, 41.2; PfSD 1, 2 5.2 1 Mutation: changing variables Some variables never change A rule we have used in 116 and in 115: • Any function always returns the same value when called with the same arguments. ( define x 120) ( sqr x ) ⇒ 14400 .... absolutely anything at all .... ( sqr x ) ⇒ 14400 • Our functions’ definitions cannot change. • Our variables’ definitions cannot change. • So we evaluate the same expression for the functions, and the values of the functions’ argu- ments will have the same value. • Nothing changes. 5.3 No mutation makes life easier This is very comforting: ( define x 120) ...( f x )... x No matter what f is, even if we didn’t write it , even if we can’t see it: • f can’t change the value of x . • It will always be 120. 5.4 1 1.1 Why have mutation? This isn’t always what we want However, there are times that this might not seem so helpful. A natural example might be a route finding program ( define localmap (... something-complicated ...)) ( find-route localmap ’ uwaterloo ’ conestogamall ) ⇒ ’(( university to phillip ) ( phillip to columbia ) ( columbia to king ) ( king to destination )) This is fine, until times change. 5.5 But things change! This works fine until: • There’s construction that blocks a road, or • Someone builds a new road. In the way that we have had so far, if one call to ( find-route localmap ’ uwaterloo ’ conestogamall ) gives a given route, every other call will as well. We can’t re-map the route; it’s impossible. 5.6 Other reasons to have different outcomes There might be other times we’d want some way of having two different calls to the same function return different things. Example 1 . For example, our current model won’t work at all with input or output. Imagine a function get-key-from-keyboard . • How can the same function call return "a" when someone pushes that key and "q" when someone pushes that one? 5.7 Or a game Or imagine a board game, where we want to be able to go forward a turn: ( define board ...) ( show-current-board board ) ( play-a-turn board ) ( show-current-board board ) We have to be able to change the state of the board, or we can’t play a boardgame! (Or build a document in a word processor, or ...) 5.8 This can’t work! This kind of code can’t do what we want: • Both calls to show-current-board must have identical values....
View Full Document
This note was uploaded on 01/06/2011 for the course CS 116 taught by Professor T.vasiga during the Winter '09 term at Waterloo.
- Winter '09
- Computer Science