notes09 - 1 DarrenKuo cs61atd

Info iconThis preview shows pages 1–2. Sign up to view the full content.

View Full Document Right Arrow Icon
Darren Kuo cs61a-td CS61A Notes 9 – The Attack of the Environmentalists (v1.0) Imperative Perils For those of you used to programming in C or Java or almost any other languages, the idea of “assignment” –  assigning a value to a symbol – should be a dusty old hat.  Certainly, there’s nothing exotic about it.  But why have  we been so cautious about introducing this concept to you – 9 weeks into the semester! – when, if you take an  introductory CS class in any other language, you would see assignment on the first day?  And why do I write such  long and convoluted sentences? Before that, note that we have now stepped out of pure “functional programming”, and now has functional  programming with  side effects.   Here, nice properties of functional programming disappear; more specifically,  the  order in which expressions are evaluated matters , and  two calls to the same procedure with the same  arguments may not produce the same result! Beyond that, you should note one more thing.  Up until now, whenever we make a procedure call like  (square 3)  or  (+ 2 5) , we are interested in what the procedure call  returns .  Such is the fundamental idea of functional  programming – procedures are interesting only because they take in something and produce something else  (deterministically, might I add!).  This is not always true now.  For example, if we say  (set! x 5) , what do we  want it to return?  Well, we really don’t care what it returns, as long as it binds the value of  5  to  x  after it’s done!  For such expressions,  we’re more interested in their side effects than their return values . Precisely because of that, sometimes we’ll want to evaluate multiple statements at once (each having some side  effects), whereas before we only evaluated one.  Sometimes you can do that directly: (define (foo x) (set! x 3) (set! y 5) (cons x y)) Note that the above defined procedure,  foo , has three statements, only one of which returns something interesting.  STk  will execute the three statements in the order of appearance, and return the value of the last expression.  You  can do the same with a  cond  statement: (cond ((< x 5) (set! x 10) (set! y 5) ‘(cs61a rocks and so do toads)) (else (set! x 5) (set! y 10) ‘(flan in the face))) However, you cannot do the same for  if  statements for obvious reasons: (if (> x 3) (set! x 3) (set! y 5) (set! z 10)) What does the above mean?  There’s no way for  STk  to tell what you intended ( set!  
Background image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
Image of page 2
This is the end of the preview. Sign up to access the rest of the document.

This note was uploaded on 08/07/2010 for the course COMPUTER S 61A taught by Professor Harvey during the Spring '06 term at University of California, Berkeley.

Page1 / 4

notes09 - 1 DarrenKuo cs61atd

This preview shows document pages 1 - 2. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online