1. Imagine running some code in a (good, hypothetical) debugger.
  2. Step through the code at the finest level of detail.
  3. The "step" command is what the code will "do next, atomically, then stop".
  4. The "continue" command (continue without stopping again) is what the code will "do next and thereafter".
  5. The "continue" command is the debugger's way to access a continuation.
  6. The Scheme function call-with-current-continuation is like the "continue" command of this hypothetical debugger.
  7. The difference is rather than having the debugger get access to the continuation, your code itself gets access to the continuation, "disguised" as a procedure rather than as a debugger command.
  8. Like any Scheme procedure, this "continuation procedure" can be called over and over again.
  9. Like any impure language, though, Scheme side effects like assignment and I/O are not purely functional and so subsequent invocations of the "continuation procedure" take place in the state of the system resulting from earlier side effects.