Question: In functional programming, it's often important to optimize any "looping" code to be tail recursive. Tail recursive algorithms are usually split between two functions, however - one which sets up the base case, and another that implements the actual loop. A good (albeit academic) example would be the reverse function.

```
reverse :: [a] -> [a]
reverse = reverse_helper []

reverse_helper :: [a] -> [a] -> [a]
reverse_helper result [] = result
reverse_helper result (x:xs) = reverse_helper (x:result) xs

```

"reverse\_helper" isn't really a good, descriptive name. However, "reverse\_recursive\_part" is just awkward.

What naming convention would you use for helper functions like this?

Answer: 
I tend to add "\_recurse" to the end. So "reverse\_recurse". Not sure where I got that from. I like leaving the base case function simple as you have in your example. It tends to be the "public" function and the fact that it uses a helper function to perform the iteration is irrelevant to the caller. In javascript I sometimes go so far as to hide the iterative function via a closure, to make it really clear it is not to be called directly.
setup and execute

example:

```
function whateverSetup() { ... }
function whateverExecute() { ... }

```