#### Lab Index:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44

Computer Science 153 is a laboratory-based course that uses collaborative learning extensively. The following list outlines each laboratory exercise for the course.
Laboratory
Exercise Title and Description
Lab. 1 Getting Started:
• Course Materials via Netscape
• Beginning Scheme
• Symbol and Expression Definition
• Lab. 2 User-Defined Procedures: Due Friday, January 25
• Numeric Procedures and the Quote Procedure
• Lambda Expressions
• Editing with XEmacs
• Recording Work At Your Workstation
• Lab. 3 Simple Scheme Predicates:
• Scheme Within XEmacs
• Type and Equivalence Predicates
• Lab. 4 Conditional Execution in Scheme: Due Tuesday, January 29
• Boolean Expressions: and, or
• cond statement
• if statement
• Lab. 5 Simple Lists:
• List Constructors: Cons, Car, Cdr
• List Literals
• Common List Operations
• Lab. 6 Recursion: The Basics:
• Introduction to Recursion
• Recursion on Strings and Lists
• Examples
• Lab. 7 Designing Recursive Procedures:
• Base Case/Recursive Step
• Filtering
• Finding Roots
• Lab. 8 Program Correctness and Program Design:
• Pre- and Post-Conditions
• Error and Warning Procedures
• Husk-and-Kernel Programming
• Testing and trace-define
• Note: With the introduction of pre- and post-conditions in Lab 8, all procedures for subsequent labs or supplemental problems must start with a statement of pre- and post-conditions, as well as the procedure name. If no pre-conditions are appropriate, that should be stated formally stated. Of course, every procedure does something, so it must have post-conditions.

A suggested format follows:
```
(define <procedure-name>
Pre-condition:  .......
Post-condition:  .......
```
Lab. 9 Refining Recursive Procedures: Due Wednesday, February 6
• Tracing Recursive Execution
• Recursion and Efficiency
• Tail Recursion
• Lab. 10 Characters:
• Literals
• Character Encoding
• Procedures with Characters
• Lab. 11 Strings:
• Zero-based Indexing
• Predicates
• Some Applications: Encryption and Palindromes
• Lab. 12 Input/Output:
• Interactive Scheme Programming
• Tracing Output
• Lab. 13 Procedures as First-Class Citizens: Optional
• Procedure Parameters
• Map, Apply, Eval Procedures
• Examples
• Lab. 14 Variables and Scope: Extra Credit if submitted by Monday, March 4
• Let, Let*, Letrec
• Local Bindings
• Scope
• Lab. 15 Tail Recursion: Due Monday, February 18
• Named Let Expressions
• Practice with Tail Recursion
• Examples
• Lab. 16 Iteration:
• Loops
• Do Expressions
• Examples
• Lab. 17 Sorting: Due: Wednesday, February 20
• Insertion into an Ordered List
• Insertion Sort
• Sorting as an Application of Currying
• Lab. 18 Higher-Order Procedures: Due: Tuesday, February 26
• Currying and Uncurrying
• Operator sections
• Procedure composition
• Lab. 19 Sorting and Mutation:
• Structural Mutation
• Set!-expressions
• Assignments to Parameters
• Lab. 20 Files:
• Input, Output, Ports
• eof-object? predicate
• Lab. 21 File Processing:
• Line-by-Line Processing
• Elements of a File I/O Library
• Lab. 22 Procedures of Variable arity:
• Parameter Declaration
• Alternative Forms for Lambda Expressions
• Examples
• Lab. 23 Placing Students Using An Expert System: Optional; Extra Credit if submitted by Friday, March 15
• The Student Placement Problem
• Rule-Based Systems
• Processing Text Files
• Lab. 24 And Introduction to the World Wide Web and CGI Programming:
• HTML Format
• Creating and Editing an HTML document
• An Introduction to CGI and Scheme Programming
• Lab. 25 CGI and the World Wide Web: Due Monday, March 11
• HTML Format
• An Introduction to CGI
• CGI and Scheme Programming
• Lab. 26 Abstract Data Types:
• Encapsulating Data and Operations
• Implementation in Scheme
• Lab. 27 Vectors: Optional; Extra Credit if submitted by Friday, April 5
• Literals
• Predicates
• Standard Procedures
• Lab. 28 Stacks and Queues:
• LIFO and FIFO Properties
• Definitions
• Applications
• Lab. 29 Object-Oriented Programming:
• Objects
• Classes
• OOP in Scheme
• Lab. 30 Object-Oriented Design:
• Example: An Eliza Program
• Problem Solving
• Identifying Classes and Class Relationships
• Lab. 31 Object-Oriented Design:
• Example: Multiple Clerks in a Store
• Identifying Classes and Class Relationships
• Considering Data Flow
• Lab. 32 Introduction to Java:
• A Course Class in Scheme and Java
• Simple Input and Output in Java
• Compiling, Interpreting, and Running Java Programs
• Lab. 33 Notes on Elementary Java:
• Basic Program Elements
• Highlights of Java Syntax
• Constructors, Extractors, Modifiers
• Lab. 34 Building a Simple Class:
• Program State, Fields
• Constructors and Methods
• Lab. 35 Problem Solving in Java: Due Friday, April 12
• Role of Classes and Objects in Java
• Conditional Expressions
• Examples
• Lab. 36 Iteration and Arrays:
• while loops
• Array Mechanics
• Problem-solving with Arrays
• Lab. 37 Searching: Due Wednesday, April 17
• Linear Search
• Binary Search
• Application in a Hi/Low Game
• Lab. 38 Hash Tables and Inheritance: Extra Credit if submitted by Wednesday, May 1
• Hash Tables as an Alternative to Arrays
• Directories and Class Hashtable
• A new Directory class and some Derived Classes
• Lab. 39 Analysis of Algorithms: Extra Credit if submitted by Tuesday, May 7
• Time and Space Complexity
• Big-O Notation
• Examples
• Lab. 40 Sorting Lists and Arrays: Due: Monday, April 29
• Insertion Sort
• Quicksort
• Analysis of Algorithms
• Lab. 41 Generalization and Exceptions: Due Wednesday, May 1
• Polymorphism
• Exception Handling
• Interfaces
• Lab. 42 Lists in Java: Extra Credit if submitted by Friday, May 10
• Definitions and Nodes
• Common Methods
• Examples
• Lab. 43 Trees and Recursive Definition: Due Wednesday, May 8
• Definition
• Binary Search Trees
• Search and Traversal
• Lab. 44 More Binary Search Trees: Extra Credit if submitted by Friday, May 10
• Deletion
• Determining Height
• Determining Balance

• This document is available on the World Wide Web as

```http://www.cs.grinnell.edu/~walker/courses/153.sp02/lab-index.html
```