Quiz Introducing Higher-Order Functions

Contents of the Kahoot quiz at the begining of
Lecture 4B
2018 Dave Sands

This is a literate Haskell file. All code is explicitly marked with a ">".  Everything else is a comment.
It loads in ghci just like any other haskell file.


Try to answer the questions
then try them out to see what is the right answer.

-----------------------------------------------------

Q1 The function map works like this:

> prop_map1 = map even [2,3,4] == [True,False,True]
> prop_map2 = map abs  [-1,0]  == [1,0]
> prop_map3 = map abs  []      == []

What does example1 give?

> example1 = map up [1,2,3]
>    where up n = n + 2

> a1 = [2,3,4]
> a2 = [3,4,5]
> a3 = [1,2,3]
> a4 = undefined -- it gives an error

-----------------------------------------------------

Q2 What value does p give?

> p = sum (map abs [2,-2,3])

Which of these properties is true for map?
(there are four possible answers!)

> prop_map4 f xs   = length (map f xs) == length xs

> prop_map5 f x xs = map f (x:xs) == f x : map f xs

-----------------------------------------------------
Q3
Exactly one of these definitions for map is NOT correct:

> map1 f []     = []
> map1 f (x:xs) = f x : map1 f xs

> map2 f xs     = [f x | x <- xs]

> map3 f xs     = [f x | x <- map3 f xs]

Which one?
-----------------------------------------------------

Q4 map is called a higher-order function because one of
its arguments is a function

Which of these are higher-order functions?

> h1 x y = x (y ++ "\n")

> h2 x y = map x y

> h3 x y = even x && odd y

To find the answer look at the types for each of these. Look for a type where one of the arguments is a function (i.e. it has a -> in its type)

-----------------------------------------------------
Q5 
The definition of map:
map f xs = [f x | x <- xs]

-- So the type of map is

map :: [t] -> [u]             
map :: u -> [t] -> [u]        
map :: (t -> u) -> [t] -> [u] 

Simply type :t map at the ghci prompt for the answer
----------------------------------------------------


------------------------------------------------------
Q6 Standard function filter can be defined
filter p xs = [ x | x <- xs, p x]

-- Some examples of the function filter
> prop_filter1 = filter odd [1,2,3,4,5]  == [1,3,5]
> prop_filter2 = filter even [1,2,3,4,5] == [2,4] 

What does filter abs [1,-1,0] give?

----------------------------------------------------
Q7 
filter p xs = [x | x <- xs, p x]

> ex = filter even [1..10]

ex gives the value:

> a1 = [1,3,5,7,9]
> a2 = [2,4,6,8,10]
> a3 = False
or does it give something else?

-------------------------------------------------------
Q8 Combining map and filter

map operates on every element in a list
filter selects some elements from a list

> example = map even (filter odd [1..3])

-- example is equal to which of these?
> a1 = [1,3]
> a2 = [True,False,True]
> a3 = [False,False]
> a4 = [True,True]