CS 330 Lecture 32 – Filter and Memoization
Agenda
- what ?s
- program this
- type synonyms
- memoization
Intentions
- I can use the filter pattern with custom predicates to extract a subset of data.
- I can employ memoization to cache and quickly recall the results of function calls.
Program This
- Write a function
maxAll
that accepts a list of numbers and yields the maximum.
Problems
- Write a function
nonzeroes
that accepts a list of numbers and yields a list containing only the nonzero elements. For example,nonzeroes [0, 1, -3, 0]
yields[1, -3]
. - Write a function
overs
that accepts an n and a list of strings and yields a list containing only those strings whose length is greater than n. For example,overs 3 ["the", "quick", "brown", "fox"]
yields["quick", "brown"]
. - Write a type synonym for a String-Double pair called
RatedMovie
. Write a functionrejects
that accepts a list ofRatedMovie
s and yields a subset of those with less than 2 star ratings.
Code
Doowop.hs
import Data.Function.Memoize
foldr' mix accum [] = accum
foldr' mix accum (first:rest) = foldr' mix (mix accum first) rest
maxAll :: (Ord a) => [a] -> a
maxAll [] = error "no max"
maxAll (first:rest) = foldr' (\maxSoFar usurper -> if (maxSoFar > usurper) then maxSoFar else usurper) first rest
-- maxAll (first:rest) = foldr' max first rest
nonzeroes :: [Int] -> [Int]
nonzeroes [] = []
nonzeroes (first:rest)
| first == 0 = nonzeroes rest
| otherwise = first : nonzeroes rest
filter' :: (t -> Bool) -> [t] -> [t]
filter' predicate [] = []
filter' predicate (first:rest)
| predicate first = first : filter' predicate rest
| otherwise = filter' predicate rest
type RatedMovie = (String, Double)
rejects :: [RatedMovie] -> [RatedMovie]
rejects = filter' (\(_, rating) -> rating < 2)
fib' x
| x <= 1 = x
| otherwise = fib' (x - 1) + fib' (x - 2)
fib = memoize fibhelper
where
fibhelper :: Int -> Int
fibhelper x
| x <= 1 = x
| otherwise = fib (x - 1) + fib (x - 2)
Haiku
on cache misses
Ask a child questions
It puts a hole in their brain
That wants to be filled
Ask a child questions
It puts a hole in their brain
That wants to be filled