Code Examples

This page (which you can read on the web at $PUB/code-examples.shtml) 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. Little Schemer, Chapter 2
  2. Little Schemer, Chapter 3
  3. Little Schemer, Chapter 4
  4. Scheme Background
  5. EOPL 2e Chapter 1
  6. EOPL 2e Chapter 2
  7. EOPL 2e Chapter 3
  8. EOPL 2e Chapter 4
  9. EOPL 2e Chapter 5
  10. EOPL 2e Chapter 6

The Little Schemer, Chapter 2

$PUB/lib342/copy.scm, a prototype for these kinds of procedures, although it doesn't seem to do much.






The Little Schemer, Chapter 3


The Little Schemer, Chapter 4




Scheme Background

Data Types

Write Scheme code to:



$PUB/lib342/lambda*.scm, for example $PUB/lib342/lambda-1-exp.scm



In $PUB/lib342/ most files have type annotations (try the Unix command: grep deftype *.scm)


Write Scheme code using expressions, statements, and definitions.

$PUB/lib342/nth-element.scm, among many other examples in $PUB/lib.




$PUB/lib342/sym-exp.scm (parse-s-list)

$PUB/lib342/remove-sym-exp-with-map.scm (remove-s-list)


$PUB/lib342/test-homework.scm (cs342:test-maker, cs324:eval-print-maker, cs342:regression-test-maker-maker, ...)

$PUB/lib342/tc-type-helpers.scm (tc:axiom-helper, tc:rule-helper, etc.)

$PUB/lib342/vector-generator.scm (see $PUB/lib342/vector-generator.tst and vector-map.scm for how it's used)



$PUB/lib342/atomic-tree.scm (tree)

$PUB/lib342/set-ops-as-vector.scm (set-of, set-union*)

Syntactic Abstraction


$PUB/lib342/set-ops-as-vector.scm (set-member?, set-subset?, set-equal?)



$PUB/lib342/tc-type-helpers.scm (tc:rule-or-helper, tc:sequence)


$PUB/lib342/tc-type-helpers.scm (tc:sequence, ...)

EOPL Chapter 1

Inductive Specifications and Grammars (1.1)

$PUB/lib342/lambda*.scm, for example $PUB/lib342/lambda-1-exp.scm

The document defining our type notation, which uses BNF.


Deriving Recursive Programs from Grammars (1.2)

See also the Following the Grammar handout.

See the Following the Grammar handout.

$PUB/lib342/sum.scm (sum-of-list)

$PUB/lib342/product.scm (product-of-list)

$PUB/lib342/tc-util.scm (tc:last-item, tc:some, tc:member?, tc:filter, tc:find-duplicates, ...)

$PUB/lib342/type-predicates.scm (list-of)

$PUB/lib342/select-outerwear.scm, which is an example using the temperature grammar (only alternatives, no recursion).

$PUB/lib342/iseq-map.scm, which is an example using the infinite sequence grammar (only recursion, no alternatives).

$PUB/lib342/valid-number.scm, which is an example using the phone number grammar (multiple nonterminals, no recursion).

$PUB/lib342/negate-bexp.scm, which is an example using the boolean expression grammar.

$PUB/lib342/targets.scm, which is an example using the statement-expression grammar.

$PUB/lib342/remove-named.scm, which is an example using the SXML grammar (an abstract syntax for XML).





$PUB/lib342/tc-type-translate.scm (tc:type-vars, tc:output-type-vars, tc:nest-args, tc:type-unnest-args, tc:substq-all-output)





try these using $PUB/lib342/sym-exp-cooked.scm, also instead of $PUB/lib342/sym-exp.scm

Tail Recursion (1.2.3)

Examples of full recursion are found in the section above on deriving recursive programs from grammars. Compare the code for the fully recursive $PUB/lib342/product.scm with the tail recursive code in $PUB/lib342/product-tail-recursive.scm. Note the pending computations surrounding the recursive calls in the fully-recursive version.




$PUB/lib342/tc-scheme-parser.scm (tc:get-file-suffix and tc:last-dot-in-file-pos)

$PUB/lib342/tc-util.scm (tc:last-item)


$PUB/lib342/whos-on-first.scm (get-context, try-strong-cues, try-weak-cues)


$PUB/lib342/tc-util.scm (tc:find-duplicates)


$PUB/lib342/type-predicates.scm (vector-of)

Scope and Binding of Variables (1.3)

$PUB/lib342/lambda-1-exp-examples.scm (free-vars, free?, bound-vars, bound?)

$PUB/lib342/combinator-tools.scm (occurs-free-in?)



see also $PUB/lib342/combinator-tools.scm

EOPL Chapter 2

Specifying Data via Interfaces (2.1)

Abstraction for Inductive Data Types (2.2)





The abstract syntax in chapter 3 of the EOPL text is a classic example of this.


$PUB/lib342/advice-table.scm (add-advice!)

$PUB/lib342/tc-type-translate.scm (tc:type-vars, tc:external-type-vars, tc:nest-args, tc:type-unnest-args, tc:substq-all-external)

$PUB/lib342/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/lib342/seq-as-proc.scm transformed to $PUB/lib342/seq-as-ast.scm

$PUB/lib342/environment-as-proc.scm transformed to $PUB/lib342/environment-as-ast.scm

$PUB/lib342/phone-book-as-proc.scm transformed to $PUB/lib342/phone-book-as-ast.scm and optimized to a ribcage representation in $PUB/lib342/phone-book-as-ribcage.scm

$PUB/lib342/road-map-as-proc.scm transformed to $PUB/lib342/road-map-as-ast.scm

EOPL Chapter 3

Simple Interpreter (3.1-3.2)



Conditionals (3.3)


Local Binding (3.4)



Procedures (3.5)




Recursion (3.6)


Variable Assignment (3.7)




Last modified Thursday, August 4, 2005.

This web page is for the Spring 2005 offering of Com S 342 at Iowa State University. The details of this course are subject to change as experience dictates. You will be informed of any changes. Thanks to Curtis Clifton for help with these web pages. Please direct any comments or questions to Gary T. Leavens.