CS3 Fall 2005 Lecture 9: Higher Order Functions Slide 1 Oct 17 Miniproject #2: Number-spelling Oct 24 Higher order procedures Oct 31 More HOF, the "tic-tac-toe" program "Change Making" case study Miniproject #3: Election-processing Nov 7 Nov 14 Nov 21 Midterm #2 Lists Start on the project: check-off #1 Nov 28 Work on the project: checks #2 and #3 Dec 5 Finish and turn in the project Dec 17 Final Exam (midterm #3) Slide 2 Administrivia • Mid-semester survey this week (Thur/Fri) – you NEED to do this. • Reading this week: – Simply Scheme Chapters 7-9 – Difference between dates, part III • Two resources: – http://hiroki.ucdev.org/cs3fall05 – http://wla.berkeley.edu/ Slide 3 When should the Midterm #2 review be? The second midterm is on Monday, Nov. 14 Do you want the review on: Sunday? (Nov. 13) Fri night? (Nov. 11) Wed night? (Nov. 9) And, what time? Slide 4 Quick review from last time: binary • Write binary, a procedure to generate the possible binary numbers given n bits. (binary 1)(0 1) (binary 2)(00 01 10 11) (binary 3)(000 001 010 011 100 101 110 111) Slide 5 What is a procedure? (or, a function). Slide 6 Treating functions as things • “define” associates a name with a value – The usual form associates a name with a object that is a function (define (square x) (* x x)) (define (pi) 3.1415926535) – You can define other objects, though: (define *pi* 3.1415926535) (define *month-names* ‘(january february march april may june july august september october november december)) Slide 7 Consider two forms of “month-name”: (define (month-name1 date) (first date)) (define month-name2 first) Slide 8 Why have procedures as objects? Other programming languages don’t (often) Slide 9 Procedures can be taken as arguments… (define (apply-to-5-and-3 func) (func 5 3)) (define (math-function? func) (or (equal? func +) (equal? func -) (equal? func *) (equal? func /))) Slide 10 …and procedures can be returned from procedures (define (choose-func name) (cond ((equal? name ‘plus) +) ((equal? name ‘minus) -) ((equal? name ‘divide) /) (else ‘sorry))) (define (make-add-to number) (lambda (x) (+ number x))) (define add-to-5 (make-add-to 5)) Slide 11 Higher order function (HOFs) • A HOF is a function that takes a function as an argument. • There are three main ones that work with words and sentences: – every – do something to each element – keep – return only certain elements – accumulate – combine the elements Slide 12 Patterns for simple recursions • Most recursive functions that operate on a sentence fall into: – Mapping: square-all EVERY – Counting: count-vowels, count-evens – Finding: member, first-even – Filtering: keep-evens KEEP – Testing: all-even? – Combining: sum-evens ACCUMULATE Slide 13 (define (square-all sent) (if (empty? sent) ‘() (se (square (first sent)) (square-all (bf sent)) )) (square-all ‘(1 2 3 4 5)) (every square ‘(1 2 3 4 5)) Slide 14 Write "my-every" (my-every factorial '(1 2 3 4 5)) (1 2 6 24 120) Slide 15 Write "my-keep" (my-keep odd? '(1 2 3 4 5)) (1 3 5) Slide 16