1 / 15

CS3 Fall 2005

CS3 Fall 2005. Lecture 10: More on higher order functions. Administrivia. Reading is important for this week: Tic-tac-toe, chapter 10 in Simply Scheme (Tuesday) Difference between dates part III case-study in the reader (Tuesday) Change-making case-study in the reader (Thursday)

avalon
Download Presentation

CS3 Fall 2005

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CS3 Fall 2005 Lecture 10: More on higher order functions

  2. Administrivia • Reading is important for this week: • Tic-tac-toe, chapter 10 in Simply Scheme (Tuesday) • Difference between dates part III case-study in the reader (Tuesday) • Change-making case-study in the reader (Thursday) • Note: there is a limit to the number of quizzes you can take outside of lab: 4 quizzes • Make sure you have completed theMid Semester Survey

  3. Tic Tac Toe

  4. The board X | | ---+---+--- O | O | X ---+---+--- | | "X _ _" "O O X" "_ _ _" "X _ _ O O X _ _ _"

  5. (another representation to help the search for possible moves) Triples X | | ---+---+--- O | O | X ---+---+--- | | "X _ _ O O X _ _ _" ( x23 oox 789 xo7 2o8 3x9 xo9 3o7 )

  6. Higher order function (HOFs) • A HOF is a procedure that takes a procedure 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

  7. A definition of every (define (my-every proc ws) (if (empty? ws) '() (se (proc (first ws)) (my-every (bf ws)) ))) • Every does a lot of work for you: • Checking the conditional • Returning the proper base case • Combing the various recursive steps • Invoking itself recursively on a smaller problem

  8. Which HOFs would you use to write these? • capitalize-proper-names (c-p-n '(mr. smith goes to washington)) (mr. Smith goes to Washington) • count-if (count-if odd? '(1 2 3 4 5))  3 • longest-word (longest-word '(I had fun on spring break))  spring • count-vowels-in-each (c-e-l '(I have forgotten everything))  (1 2 3 3) • squares-greater-than-100 (s-g-t-100 '(2 9 13 16 9 45)  (169 256 2025) • sum-of-squares (sos '(1 2 3 4 5 6 7)  30 • successive-concatenation (sc '(a b c d e)  (a ab abc abcd abcde)

  9. Write successive-concatenation (sc '(a b c d e))  (a ab abc abcd abcde) (sc '(the big red barn))  (the thebig thebigred thebigredbarn) (define (sc sent) (accumulate (lambda ?? ) sent))

  10. HOF: Base cases can be confusing • What does (every square '()) return? • (every square"") • (every square "12345") • What about (keep odd? '()) • (keep odd? "") • How about (accumulate + '()) • (accumulate + "") • (accumulate * '()) • (accumulate word '(a)) • (accumulate + '(a) • (accumulate word '(a b)) • (accumulate + '(a b))

  11. lambda • "lambda" is a special form that returns a function: (lambda (param1 param2 …)statement1 statement2 ) (lambda (x) (* x x)  [a function] (every (lambda (x) (* x x) '(1 2 3 4)) (1 4 9 16)

  12. Can a function defined by a lambda be recursive? (lambda (sent) (if (empty? sent) '() (se (square (first sent)) (????(bf sent)))))

  13. When do you NEED lambda? • When you need the context (inside a two-parameter procedure) (add-suffix '-is-great '(nate sam mary)) (nate-is-great sam-is-great mary-is-great) • When you need to make a function on the fly

  14. Procedures that make procedures • Generally, name procedures that create procedures "make-XXX" (make-bookends 'o)  #[closure arglist=(inner-wd) d7d0e0] ((make-bookends 'o) 'hi)  ohio ((make-bookends 'to) 'ron)  toronto (define tom-bookend (make-bookends 'tom)) (tom-bookends "")  tomtom

More Related