1, Don't write a solution that depends on the specific example of the ice cream choices. Your menu block should work for any number of categories (size, flavor, cone or cup, sundae syrup, whipped cream or not, nuts or not, ...) and any number of possibilities per category (kiddie, tiny, small, medium small, medium, medium large, large, extra large, elephantine, gargantuan, infinite...). It turns out to be easier, more fun, and more useful to find a general solution.

2. As in the subsets problem, the recursive call will be on all but first of the list of choices. So, let's say you have the menu list for flavors and holders (cone or cup), starting with chocolate pudding cone, chocolate pudding cup, pumpkin cone, etc. How would you combine one of those, say chocolate pudding cone, with the three sizes?

3. Okay, if you can combine one recursive-call choice with the three sizes, how would you apply that method to all the choices? (Think higher order functions.)

4. Don't forget what you learned in the previous lesson about formal parameters; reread the example on that page if it's not vivid in your mind.

5. The desired result is a list of sentences (text strings). What should you report in the base case? Think about the subsets block, but really think about it; don't just copy code from it.

6. You can make your program more efficient by computing the recursive call only once, as in subsets.

☞ Now write the code. We're not providing a solution, so if you get stuck, work with other students.