Map function

In the recipe, we have implemented map in two ways. Both implementations are described here as follows:

        map f [1,2,3,4,5] = f 1 : map f [2,3,4,5]
= f 1 : (f 2 : map f [3,4,5])
= f 1 : (f 2 : (f 3 : map f [4,5]))
= f 1 : (f 2 : (f 3 : (f 4 : map f [5])))
= f 1 : (f 2 : (f 3 : (f 4 : (f 5 : map f []))))
= f 1 : (f 2 : (f 3 : (f 4 : (f 5 : []))))
-- reducing further
= f 1 : f 2 : f 3 : f 4 : f 5 : []
        map' f [1,2,3,4,5] = map1 [1,2,3,4,5] []
= map1 [2,3,4,5] [f 1]
= map1 [3,4,5] [f 2, f 1]
= map1 [4,5] [f 3, f 2, f 1]
= map1 [5] [f 4, f 3, f 2, f 1]
= map1 [] [f 5, f 4, f 3, f 2, f 1]
-- When input is empty, the result is reversed and
returned
= [f 1, f 2, f 3, f 4, f 5]