150 likes | 233 Views
Ensure completion of the Mid-Semester Survey to earn points and review important readings for the week on Tic-Tac-Toe and Higher Order Functions (HOFs). Learn about various HOFs and their applications in manipulating words and sentences. Practice writing procedures using lambda functions and understand recursive functions. Explore when to use lambda for context-specific functions and on-the-fly function creation. Create procedures that generate procedures for enhanced functionality.
E N D
Administrivia • Make sure you have completed theMid Semester Survey • Scheduled the week before Spring Break • this will be worth some points • Reading is important for this week: • Tic-tac-toe, chapter 10 in SS • Case study: change-making
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
(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))
Write "my-keep" (my-keep odd? '(1 2 3 4 5)) (1 3 5)
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)
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))
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))
lambda • "lambda" is a special form that lets you make 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)
Can a function defined by a lambda be recursive? (lambda (sent) (if (empty? sent) '() (se (square (first sent)) (????(bf sent)))))
When do you NEED lambda? • When you need the context (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
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
Ha! • Make a procedure that returns a procedure that takes a number X and returns a procedure that takes a number and adds X to it. • Whew!