Programming Books

7 Excellent Free Books to Learn Scheme

Last Updated on September 21, 2023

Scheme is a general-purpose, functional, programming language descended from Lisp and Algol. It is a statically scoped and properly tail-recursive dialect of Lisp.

Scheme is a very simple language with a very simple syntax based on s-expressions. Its simplicity is fundamental in making it a popular introductory language. It follows a minimalist design philosophy specifying a small standard core with powerful tools for language extension. This philosophy helps make Scheme a programming language that can be learned over a weekend. Nevertheless, Scheme is a very versatile language being used to write a diverse range of applications such as financial analysis tools, compilers, virtual reality systems, as well as more mundane software.

Scheme is used in computing education and research as well as a wide range of industrial applications.

None of the books featured below are released under an open source license.

1. The Scheme Programming Language by R. Kent Dybvig

The Scheme Programming LanguageScheme is now a complete general-purpose programming language, though it still derives its power from a small set of key concepts.

This book is intended to provide an introduction to the Scheme programming language but not an introduction to programming in general. The reader needs some experience programming and be familiar with terms commonly associated with computers and programming languages. This book covers the language of the Revised 6 Report.

  • Introduction – describes the properties and features of Scheme that make it a useful and enjoyable language to use and describes Scheme’s notational conventions and the typographical conventions employed in this book.
  • Getting Started – an introduction to Scheme programming for the novice Scheme programmer that leads the reader through a series of examples, beginning with simple Scheme expressions and working toward progressively more difficult ones.
  • Going Further – covers more advanced features and concepts such as syntactic extension, continuations, and libraries.
  • Procedures and Variable Bindings – describes operations for creating procedures and variable bindings including variable references, lambda, case-lambda, local binding and more.
  • Control Operations – examines program control operations.
  • Operations on Objects – operations on the various object types (including lists, numbers, and strings).
  • Input and Output – transcoders, opening files, standard ports, string and bytevector ports, opening custom ports, port operations, input operations, output operations, convenience I/O, filesystem operations, and bytevector/string conversions.
  • Syntactic Extension – looks at keyword bindings, syntax-rules transformers, syntax-case transformers.
  • Records – record-type definitions.
  • Libraries and Top-Level Programs – standard libraries, defining new libraries, and top-level programs.
  • Exceptions and Conditions.
  • Extended Examples.

Read the book

2. Concrete Abstractions – An Introduction to Computer Science Using Scheme by Max Hailperin, Barbara Kaiser, and Karl Knight

Concrete Abstractions – An Introduction to Computer Science Using SchemeConcrete Abstractions – An Introduction to Computer Science Using Scheme covers the basics of programming and data structures, and gives first-time computer science students the opportunity to not only write programs, but to prove theorems and analyze algorithms as well.

The book features thorough integration of theory and practice, and presents theory as an essential component of practice, rather than in contrast to it.

Chapters cover:

  • Computer Science and Programming – examines procedures from several different viewpoints. It shows the reader how to write simple, non-recursive procedures in Scheme.
  • Recursion and Induction – introduces students to recursion as a way of generating processes of varying sizes.
  • Iteration and Invariants – introduce iteration as an alternative to recursion, and show how an iterative process uses less memory than a recursive one.
  • Orders of Growth and Tree Recursion – orders of growth, tree recursion and digital signatures, an application: fractal curves.
  • Higher-Order Procedures – procedures taking procedural parameters, then later by writing procedures that return procedures (procedure factories), uncomputability, procedures that make procedures, an application: verifying ID numbers.
  • Compound Data and Data Abstraction – uses the game of Nim to introduce data abstraction as a method for dealing with compound data.
  • Lists – explains Scheme lists through the two-part list viewpoint, and illustrate them using box-and-pointer diagrams. Construct simple lists, both explicitly and procedurally, and explain and reinforce basic list processing idioms (cdring down a list, consing up a list, map, filter, iteration, and tree recursion) through numerous examples and exercises.
  • Trees – binary search trees, efficiency issues with binary search trees, expression trees. The application section develops an automated phone book using the data retrieval radix trees know as tries.
  • Generic Operations – multiple representations, and exploiting commonality. The application section illustrates generic operations by having the reader implement a computer graphics system.
  • Implementing Programming Languages – writing two different Scheme evaluators (Micro-Scheme and Mini-Scheme) in Scheme using the pattern/action system.
  • Computers with Memory – use vectors to program a simulator for our RISC architecture in Scheme.
  • Dynamic Programming – shows how storage, in the form of vectors, can be used to dramatically improve the efficiency of algorithms through the closely related techniques of memoization and dynamic programming.
  • Object-Based Abstractions – RA-Stack Implementations and Representation Invariants, Queues, Binary Search Trees Revisited, An Application: Dictionaries.
  • Object-Oriented Programming – extend object-based programming to true object-oriented programming.
  • Java, Applets and Concurrency – shows how the object-oriented programming ideas from the Object-Oriented Programming chapter can be transplanted into another programming language, Java.

Read the book

3. Simply Scheme: Introducing Computer Science by Brian Harvey, Matthew Wright

Simply Scheme: Introducing Computer ScienceThis introduction to computer science and computer programming in Scheme is for non-computer science majors with a strong interest in the subject and for computer science majors who lack prior programming experience.

The text allows the student to experience the computer as a tool for expressing ideas, not as a frustrating set of mathematical obstacles. This goal is supported by the use of Scheme, a modern dialect of Lisp, designed to emphasize symbolic programming.

Chapters cover:

  • Introduction – introduces the Scheme programming language. It provides a collection of short Scheme programs, presented to show off what Scheme can do.
  • Composition of Functions – explores functions in some detail. This chapter separate she idea of functions from the complexities of programming language notation.
  • Functions as Data – looks at higher-order functions, lambda, as well as a tic-tac-toe example.
  • Recursion – Introduction to recursion, moves on to build up to a recursive procedure by writing a number of special-case non-recursive procedures, starting with small arguments and working toward larger ones. Later chapters look at recursion in more detail, common patterns in recursive procedures, with an extended example showing off what the reader has been learning to accomplish.
  • Abstraction – takes a closer look at two specific kinds of abstraction. One is data abstraction, which means the invention of new data types. The other is the implementation of higher-order functions, an important category of the same process abstraction of which third-person is a trivial example.
  • Sequential Programming – input and output, an example: the functions program, files, vectors, a further example: a spreadsheet program.

Read the book

Next page: Page 2 – Revised Report on the Algorithmic Language Scheme and more books

Pages in this article:
Page 1 – The Scheme Programming Language and more books
Page 2 – Revised Report on the Algorithmic Language Scheme and more books

All books in this series:

Free Programming Books
AdaALGOL-like programming language, extended from Pascal and other languages
AgdaDependently typed functional language based on intuitionistic Type Theory
ArduinoInexpensive, flexible, open source microcontroller platform
AssemblyAs close to writing machine code without writing in pure hexadecimal
AwkVersatile language designed for pattern scanning and processing language
BashShell and command language; popular both as a shell and a scripting language
BASICBeginner’s All-purpose Symbolic Instruction Code
CGeneral-purpose, procedural, portable, high-level language
C++General-purpose, portable, free-form, multi-paradigm language
C#Combines the power and flexibility of C++ with the simplicity of Visual Basic
ClojureDialect of the Lisp programming language
ClojureScriptCompiler for Clojure that targets JavaScript
COBOLCommon Business-Oriented Language
CoffeeScriptTranscompiles into JavaScript inspired by Ruby, Python and Haskell
CoqDependently typed language similar to Agda, Idris, F* and others
CrystalGeneral-purpose, concurrent, multi-paradigm, object-oriented language
CSSCSS (Cascading Style Sheets) specifies a web page’s appearance
DGeneral-purpose systems programming language with a C-like syntax
DartClient-optimized language for fast apps on multiple platforms
DylanMulti-paradigm language supporting functional and object-oriented coding
ECMAScriptBest known as the language embedded in web browsers
EiffelObject-oriented language designed by Bertrand Meyer
ElixirRelatively new functional language running on the Erlang virtual machine
ErlangGeneral-purpose, concurrent, declarative, functional language
F#Uses functional, imperative, and object-oriented programming methods
FactorDynamic stack-based programming language
ForthImperative stack-based programming language
FortranThe first high-level language, using the first compiler
GoCompiled, statically typed programming language
GroovyPowerful, optionally typed and dynamic language
HaskellStandardized, general-purpose, polymorphically, statically typed language
HTMLHyperText Markup Language
IconWide variety of features for processing and presenting symbolic data
JArray programming language based primarily on APL
JavaGeneral-purpose, concurrent, class-based, object-oriented, high-level language
JavaScriptInterpreted, prototype-based, scripting language
JuliaHigh-level, high-performance language for technical computing
KotlinMore modern version of Java
LabVIEWDesigned to enable domain experts to build power systems quickly
LaTeXProfessional document preparation system and document markup language
LispUnique features - excellent to study programming constructs
LogoDialect of Lisp that features interactivity, modularity, extensibility
LuaDesigned as an embeddable scripting language
MarkdownPlain text formatting syntax designed to be easy-to-read and easy-to-write
Objective-CObject-oriented language that adds Smalltalk-style messaging to C
OCamlThe main implementation of the Caml language
PascalImperative and procedural language designed in the late 1960s
PerlHigh-level, general-purpose, interpreted, scripting, dynamic language
PHPPHP has been at the helm of the web for many years
PostScriptInterpreted, stack-based and Turing complete language
PrologA general purpose, declarative, logic programming language
PureScriptSmall strongly, statically typed language compiling to JavaScript
PythonGeneral-purpose, structured, powerful language
QMLHierarchical declarative language for user interface layout - JSON-like syntax
RDe facto standard among statisticians and data analysts
RacketGeneral-purpose, object-oriented, multi-paradigm, functional language
RakuMember of the Perl family of programming languages
RubyGeneral purpose, scripting, structured, flexible, fully object-oriented language
RustIdeal for systems, embedded, and other performance critical code
ScalaModern, object-functional, multi-paradigm, Java-based language
SchemeA general-purpose, functional language descended from Lisp and Algol
ScratchVisual programming language designed for 8-16 year-old children
SQLAccess and manipulate data held in a relational database management system
Standard MLGeneral-purpose functional language characterized as "Lisp with types"
SwiftPowerful and intuitive general-purpose programming language
TclDynamic language based on concepts of Lisp, C, and Unix shells
TeXMarkup and programming language - create professional quality typeset text
TypeScriptStrict syntactical superset of JavaScript adding optional static typing
ValaObject-oriented language, syntactically similar to C#
VHDLHardware description language used in electronic design automation
VimLPowerful scripting language of the Vim editor
XMLRules for defining semantic tags describing structure ad meaning
Notify of

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Inline Feedbacks
View all comments