Scheme Programming

If you are a bit older, and you attended an introductory computer science course at high school or university, it is likely that you used the good old Scheme programming language in that course.

Brief History of Scheme

In order to better understand the history of Scheme, we have to look at the very early stages of modern computing. The development of Scheme was influenced by two earlier, very different predecessors: LISP and ALGOL programming languages.

LISP was created in 1958 by Massachusetts Institute of Technology’s (MIT) John McCarthy. Scheme was derived from LISP, using its general semantics and syntax. In addition, Scheme borrowed from ALGOL. It had been developed by a committee of European and American computer scientists at a meeting in 1958, at ETH Zurich. Scheme used its block structure and lexical scope.

In 1973, MIT’s Guy L Steele and Gerald Jay Sussman started an attempt to implement Carl Hewitt’s Actor model in the Lambda calculus. They did this by writing a tiny LISP interpreter in MacLisp and adding mechanisms for creating actors and sending messages. During their work, they realized that they created a very small and capable dialect of LISP, and they named it Scheme.

In 2003, the Scheme workshop began a new standardization process for Scheme, and eventually released ratified standard R6RS in 2006. The last stable release of Scheme is ratified standard R7RS from 2013.

Scheme Features

Scheme is a primarily functional programming language, with lists as the main data structure, and support for first-class functions. It is a simple, minimalistic, and easy to implement programming language. This minimalist philosophy has led to wide divergence between practical Scheme implementations, to the extent that the Scheme Steering Committee calls it "the world's most unportable programming language" and "a family of dialects" rather than a single language. Unlike earlier derivatives of LISP with dynamic scoping, Scheme is lexically scoped (an influence from ALGOL).

In Scheme, blocks are implemented with the following constructs: let, let* and letrec. This block structure is also inherited from ALGOL. Iteration construct do is used in Scheme, and support for iteration using tail recursion is also provided. Continuations in Scheme are first-class objects and they are supported by the call-with-current-continuation Scheme procedure (also known as call/cc). In Scheme, all data and procedures share a common namespace, and input and output are based on the port datatype.

Numerical tower is a set of complex and rational numerical datatypes specified and implemented in Scheme. Delayed evaluation is supported in Scheme through the delay form and the force procedure.

Scheme Implementations and Uses

Because of its simplicity and minimalism, Scheme libraries became very popular with programming language designers, educators, and hobbyists. This resulted in many different implementations and dialects of Scheme. The traditional LISP-style read-eval-print loop is supported in most Scheme implementations, and some also compile scheme programs to executable binaries.

The simplicity of Scheme implementations also makes it a popular choice for adding scripting capabilities to larger systems. In addition, JScheme and Kawa implementations of Scheme provide integration with Java classes.

Scheme is primarily used in education. In many introductory computer science and program design courses to demonstrate the basics of computer programming. Other notable uses of Scheme include Google App inventor for Android, GIMP graphics editor, Document Style Semantics and Specification Language (DSSSL), and so on.

Learning Scheme

Because of the widespread educational use of Scheme, learning it and finding resources for learning should not pose a problem. There are many available learning resources, both free and commercial, and we singled out a few of them.

Scheme Courses and Resources

Since Scheme is a minimalistic and streamlined programming language, it is relatively easy to master. With these courses and tutorials, you will probably be able to start programming in Scheme in no time.

  • Structure and Interpretation of Computer Programs is MIT’s introductory course 6.001 with many useful resources for Scheme including video lectures, online textbooks, projects, transcripts, and selected lecture notes.
  • DrScheme is an integrated development environment (IDE) for writing, debugging and analyzing Scheme programs, also used in education.
  • Pilo Visual Tools for Scheme (PVTS) is a basic Scheme interpreter implementation with visualization tools. It is written in Java and it has very limited interpreter capabilities, with the sole purpose to display Scheme code graphically as a learning aid.
  • Schemers.org has a nice collection of documentation and introductory texts for Scheme.

Scheme Books

Numerous Scheme books are available, and many of them are free and used in educational courses. These can be very helpful if you are just starting to learn the Scheme programming language.

  • Structure and Interpretation of Computer Programs by Abelson, Sussman and Sussman is an excellent computer science book used in introductory courses at MIT. This is one of the bibles of the LISP and Scheme world and it is available online for free, from MIT Press.
  • How to Design Programs: An Introduction to Computing and Programming by Felleisen, Findler, Flatt and Krishnamurthi provides a very nice introduction to programming logic. It is free and available online, published by MIT Press.
  • The Scheme Programming Language, Fourth Edition by R Kent Dybvig is intended to provide an introduction to the Scheme programming language, but not an introduction to programming in general. It is free and available online, published by MIT Press.
  • The Little Schemer - 4th Edition by Friedman and Felleisen introduces computing as an extension of arithmetic and algebra, and programs as recursive functions. This book is not free.
  • The Seasoned Schemer also by Friedman and Felleisen, informs the reader about additional dimensions of computing: functions as values, change of state, and exceptional cases. This book is not free.
  • How to Use Scheme: Writing Scripts and Programs with PLT Scheme by Felleisen, Findler, Flatt, Krishnamurthi, Steckler will introduce you to some pretty basic ideas, such as file input and output, to more advanced things, like simple GUI design and Web scripting aspects of Scheme. It is freely available online.

Summary

Scheme is not only a good way to learn how to program, but also a good way to begin studying computer science. These reasons should get you heading in the right direction.