CS3 Fall 2005 Lecture 9: Higher Order Functions Slide 1

advertisement
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
Download