Course Objectives

Here are the course objectives, session-by-session. By the end of each class, you should be able to do the listed items.

Class 1.1

  1. find information about the course
  2. find information about DrScheme
  3. convert arithmetic expressions into Scheme expressions, and
  4. use DrScheme to evaluate them.
  5. use define to create Scheme functions
  6. use define to name constant data
  7. write a contract and a purpose statement for a function
  8. write a function that performs an arithmetic calculation
  9. use DrScheme's stepper to see how a program is evaluated.

Class 1.2

  1. write Scheme expressions that ask questions
  2. display the Boolean values of such expressions
  3. represent English words in a Scheme program as Strings and Symbols
  4. write a Scheme program that makes a decision using cond
  5. write a Scheme program that consumes and produces words
  6. use the Boolean operators and, or and not in Scheme functions.
  7. understand when to use helper functions and constants to improve your code.

Class 1.3

  1. decide when a problem needs "compound data"
  2. write a Scheme data definition using define-struct
  3. create a compound data value using the constructor that DrScheme creates when you write a define-struct.
  4. extract the components of a compound data value using the selectors that DrScheme creates when you write a define-struct
  5. write a function over a compound data value
  6. decide when compound data has a nested structure
  7. write a Scheme data definition for a nested structure
  8. write a Scheme function that processes a nested compound data value

Class 1.4

  1. decide when a problem needs mixed data
  2. write a data definition for mixed data
  3. write a template for a function that processes mixed data
  4. use the template to complete the function
  5. choose good test cases for a function over mixed data
  6. write down the design recipe with all its steps.

Class 2.1

  1. understand how Scheme defines a list
  2. use cons to create a list, and first and rest to extract the pieces of a list
  3. write a template for a function that processes a list
  4. use the template to define a function that processes a list

Class 2.2

  1. go through each step in the design recipie to develp a function over lists
  2. use the list template to write functions that both consume and produce lists
  3. understand the need for helper functions when a computation walks along a list
  4. explain the action of the sort and insert functions that were presented as part of insertion-sort in class

Class 2.3

  1. see that the recursive functions over lists mimic the recursive nature of the data-definitions
  2. write functions that process lists of structs.

Class 2.4

  1. Write the data definition for an ancestor family tree.
  2. Generate the template for an ancestor family tree from the data definition.
  3. Write functions over ancestor family trees.

Class 3.1

  1. Know that two data definitions that refer to each other are called mutually-recursive data definitions.
  2. Write the mutually recursive data definitions for a descendant family tree.
  3. Generate the mutually-recursive function templates for the functions that process a descendant family tree.
  4. Write functions that process descendant family trees.

Class 3.2

  1. draw arrows on a Scheme program that show the defining occurence of any name used in the program.
  2. take a function that uses one or more helper fucntions and rewrite the function using one or more local definitions.

Class 3.4

  1. Recongnize common list-processing patterns
  2. Write list processing operations using map, ormap, fold and filter.