Scheme Frequently Asked Questions

The material on this page is licensed under the terms of the GNU Free Documentation License. See scheme-faq-license for more information about this.

general | language | macros | misc | programming | standards


What are "s-expressions"?

The term "s-expression" was coined by the Lisp community and stands for "symbolic expression". S-expressions are a means of representing structured data as Lisp/Scheme-like expressions, i.e. using atoms and parenthesised notation as the basic building blocks. The advantage of this representation over others is that the syntax of s-expressions is the same as that of Scheme datums. Thus data represented as s-expressions can be parsed by the the normal Scheme reader, transformed by Scheme macros, processed by list processing functions, and generated by list construction functions and quasiquotation.

What is SICP?

SICP stands for '''Structure and Interpretation of Computer Programs''' - an influential computer science textbook by Hal Abelson, Jerry Sussman and Julie Sussman that uses Scheme as the teaching language. It is also known as the "Wizard Book" (because of the wizards on the cover) or the "Purple Book" (because of the color of the cover). An online version is available at

Can dynamic-wind be implemented in Scheme?

The procedures call-with-current-continuation and dynamic-wind engage in quite subtle interaction with each other. Many Schemes implement both in Scheme on top of a primitive, non-"wind-safe" call-with-current-continuation. This is a particularly common implementation strategy because previous versions of the Scheme standard did not include dynamic-wind and wind-safe call-with-current-continuation. Note that implementations following this strategy must ensure that the original call-with-current-continuation is no longer reachable from application code since that could compromise the wind-safety of the entire application.

Are there any tools for documenting Scheme code?

There are several JavaDoc-like tools for generating interface documentation from specially annotated Scheme code:

The Scheme Elucidator ( produces internal documentation of a Scheme program. It connects the documentation and the program by means of links instead of physically embedding the program fragments in the documentation.