Register

# 2.4. Functional Programming - Using Helper Functions with Accumulators¶

## 2.4.1. Using helpers to write reverse and split functions¶

How would you design a reverse function that takes in a list of integers and returns a list containing the same elements as the input list but in reverse order?

> reverse( [1,2,3] )   // we could start with [ ] and insert 1 into it to get [ 1 ]
[ 3, 2, 1 ]            // then insert 2 into [ 1 ] to get [ 2, 1 ]
// then insert 3 into [ 2, 1 ] to get [ 3, 2, 1 ]
> reverse( [ ] )
[ ]


With an accumulator we could use a recursive helper function that takes in the input list ns*and the list *a being built and returns ...

var reverse_helper = function (ns, a) {
if (fp.isNull(ns)) {
return ???
} else {
??????????
}
}


Then we would call this helper function with a reverse function that acted as a front-end, passing in the initial value for a. The extra parameter in the helper function is called an accumulator.

var reverse = function (ns) { return reverse_helper(ns, ??? ); }


As another example of using an accumulator, consider how you would design a split function that takes in an integer $n$ and a list $ns$ of integers and returns two lists, the first one of which contains all of the elements of $ns$ that are smaller than $n$ and the second one contains the remaining elements of $ns$?

> split(5, [1,9,2,8,3,7])
[ [ 3, 2, 1 ], [ 7, 8, 9 ] ]
> split(5,[ ])
[ [ ] [ ] ]


We call the first argument of split the pivot because of a famous algorithm that uses split (see the second review problem).

var split_helper = function (pivot,ns,smalls,bigs) {

??????
}

var split = function (pivot,ns) {
return split_helper(pivot, ns, [ ], [ ]);
}


The first review problem will test your understanding of split and another function called join, which is also developed using an accumulator.

## 2.4.2. Using the split function to develop a sort function¶

This problem will have you use the split function to implement an efficient sorting algorithm.

## 2.4.3. Additional Practice with the Accumulator Pattern¶

This problem will give you a lot more practice with the accumulator pattern. It is a randomized problem. You have to solve it three times in a row.