Code Examples

$Date: 2001/11/05 20:26:43 $

This page (which you can read on the web at gives access to code examples in the course library and in the lecture notes directory.

You can use the table of contents (on the web) to jump directly to the kind of example you are looking for.

If you click on a Scheme file name and your browser tries to download a plugin (e.g., for a Lotus Screen Cam Movie), then you need to change your browser's rules for associating file suffixes with viewers. One way to do this on Windows (95/98) is to go into the Windows Explorer, and click on "View" then "Folder Options", then click on the "File Types" tab, and then enter a new file type for .scm files.


  1. Scheme Background
  2. EOPL 2e Chapter 1
  3. EOPL 2e Chapter 2
  4. EOPL 2e Chapter 3
  5. EOPL 2e Chapter 4
  6. EOPL 2e Chapter 5
  7. EOPL 2e Chapter 6

Scheme Background

Data Types

 Write Scheme code to:
$PUB/lib/lambda*.scm, for example $PUB/lib/lambda-1-exp.scm
 Understand:         In $PUB/lib/ most files have type annotations (try the Unix command: grep deftype *.scm)


Write Scheme code using expressions, statements, and definitions.  Understand:


Syntactic Abstraction

EOPL Chapter 1

Inductive Specifications and Grammars (1.1)

Deriving Recursive Programs from Grammars (1.2)

Tail Recursion (1.2.3)

  • Understand the difference between full recursion and tail recursion.

  • Examples of full recursion are found in the section above on deriving recursive programs from grammars.  Compare the code for the fully recursive $PUB/lib/product.scm with the tail recursive code in $PUB/lib/product-tail-recursive.scm.  Note the pending computations surrounding the recursive calls in the fully-recursive version.
  • Write tail-recursive procedures:
  •           $PUB/lib/product-tail-recursive.scm
              $PUB/lib/type-check-scheme-parser.scm (tc:get-file-suffix and tc:last-dot-in-file-pos)
              $PUB/lib/type-check-utils.scm (tc:last-item)
              $PUB/lib/vector-map-bang.scm          $PUB/lib/whos-on-first.scm (get-context, try-strong-cues, try-weak-cues)
             $PUB/lib/type-check-utils.scm (tc:find-duplicates)
             $PUB/lib/type-predicates.scm (vector-of)

    Scope and Binding of Variables (1.3)

    EOPL Chapter 2

    Specifying Data via Interfaces (2.1)

    Abstraction for Inductive Data Types (2.2)

             $PUB/lib/lambda*-examples.scm, for example $PUB/lib/lambda-1+number-exp-examples.scm
             $PUB/lib/type-check-type-expr.scm (tc:occurs-in-type-expr?)
             $PUB/lib/type-check-type-translate.scm (tc:type-vars, tc:external-type-vars, tc:nest-args, tc:type-unnest-args, tc:substq-all-external)
             $PUB/lib/combinator-tools.scm (toCombinators, interpret, toLambda, occurs-free-in?)

    Data Abstraction (2.3)


    Transformation of Procedural to Abstract Syntax Tree Representations (2.3.2-2.3.3)

      $PUB/lib/seq-as-proc.scm transformed to $PUB/lib/seq-as-ast.scm
      $PUB/lib/environment-as-proc.scm transformed to $PUB/lib/environment-as-ast.scm
      $PUB/lib/phone-book-as-proc.scm transformed to $PUB/lib/phone-book-as-ast.scm and optimized to a ribcage representation in $PUB/lib/phone-book-as-ribcage.scm
      $PUB/lib/road-map-as-proc.scm transformed to $PUB/lib/road-map-as-ast.scm

    Gary T. Leavens