1. The first step in this assignment is to learn the standard higher-order functions on lists---you will use them a lot. Review Sections 2.7.2, 2.8.1, and 2.8.2. Now consider each of the following functions: map filter exists? all? curry uncurry foldl foldr Below, please put the name of each function on the line after the statement that _most accurately_ describes it. Any given statement may describe more than one function, exactly one function, or no functions. Any given function name must appear on exactly one line after a statement. * Each of the functions listed after the arrow *might* return a Boolean: → * Each of the functions listed after the arrow *always* returns a Boolean: → * None of the functions listed after the arrow *ever* returns a Boolean: → 2. Here are the same functions again: map filter exists? all? curry uncurry foldl foldr And again, please put the name of each higher-order function on the line after the statement that most accurately describes it: * Each of the functions listed after the arrow takes a list and a function. Each one *always* returns a list of *exactly* the same size as the original list: → * Each of the functions listed after the arrow takes a list and a function. Each one *always* returns a list of *at least* the same size as the original list: → * Each of the functions listed after the arrow takes a list and a function. Each one *always* returns a list of *at most* the same size as the original list: → * Each of the functions listed after the arrow *might* return a list: → * _None_ of the functions listed after the arrow *ever* returns a list: → 3. Here are the same functions again: map filter exists? all? curry uncurry foldl foldr And again, please put the name of each higher-order function next on the line after the statement that most accurately describes it: * Each of the functions listed after the arrow takes one argument, which is a function that itself takes two arguments: → * Each of the functions listed after the arrow takes one argument, which is a function: → * Each of the functions listed after the arrow takes more than one argument: → _You are now ready to tackle most parts of exercise 14._ 4. Review the difference between `foldr` and `foldl` in section 2.8.1. You may also find it helpful to look at their implementations in Section 2.8.3, which starts on page 130; the implementations are at the end. (a) Do you expect `(foldl + 0 '(1 2 3))` and `(foldr + 0 '(1 2 3))` to be the same or different? (b) Do you expect `(foldl cons '() '(1 2 3))` and `(foldr cons '() '(1 2 3))` to be the same or different? (c) Look at the initial basis on page 156. Give one example of a function, other than `+` or `cons`, that can be passed as the first argument to `foldl` or `foldr`, such that `foldl` _always returns exactly the same result_ as `foldr`. (d) Give one example of a function, other than `+` or `cons`, that can be passed as the first argument to `foldl` or `foldr`, such that `foldl` _may return a different result_ from `foldr`. _You are now ready to tackle all parts of exercises 14 and 15._