Chris' answer is great, but now that I've figured it out I'd like to add a bit more explanation from the perspective of a beginner to continuations.
call/cc examples
I've done (define call/cc call-with-current-continuation)
and will use hop
(in the manner of "The Seasoned Schemer") to represent the continuation.
ignoring the parameter: normal evaluation
(call/cc
(lambda (hop)
(+ 2 3)))
=> 5
hopping the entire expression: also normal evaluation
(call/cc
(lambda (hop)
(hop (+ 2 3))))
=> 5
hopping the operator:
(call/cc
(lambda (hop)
((hop +) 2 3))))
=> #<procedure:+>
hopping an operand:
(call/cc
(lambda (hop)
(+ 2 (hop 3))))
=> 3
hopping the hopper:
(call/cc
(lambda (hop)
(hop hop)))
=> #<continuation>
Basically, using call/cc
gives us a way to 'hop' out of an expression, immediately aborting the computation with the specified return value.
There are many more sophisticated ways to use call/cc
that I don't understand, but they're not relevant to the OP.