Teach Yourself Scheme: 13.2 Escaping continuations

Escaping continuations are the simplest use of
call/cc and are very useful for programming
procedure or loop exits. Consider a procedure
list-product that takes a list of numbers and
multiplies them. A straightforward recursive
definition for list-product is:

There is a problem with this solution. If one of the
elements in the list is 0, and if there are many
elements after 0 in the list, then the answer is a
foregone conclusion. Yet, the code will have us go
through many fruitless recursive calls to recur
before producing the answer. This is where an escape
continuation comes in handy. Using call/cc, we can
rewrite the procedure as: