Fundamentals of Computer Science I (CS151 2003F)

Lab: Records in Scheme

Summary: We investigate records in Scheme through experiments with a record for chemical compounds.

Contents:

Exercises

Exercise 0: Preparation

a. Start DrScheme.

b. Make a copy of compound.ss.

c. Scan through that file to make sure that you understand all the procedures.

Exercise 1: Testing Compounds

a. Try the compoound examples given in the reading on records to see if they behave as I said they would.

b. Try a few of your own variations.

c. Explain why the attempted fake is not listed as a compound. Hint: Think about the order of the let and lambda in produce-type-mark.

Exercise 2: Filtering Compounds

Define a procedure, select-by-color, that takes two arguments -- a list, compounds, of records of type compound and a color symbol -- and returns a list of the names of compounds of that color that are elements of compounds.

Exercise 3: Falsifying Compounds

a. Can you set the melting point of a compound to an illegal temperature? If so, how? If not, why not? (Note that there are other ways to modify compounds than to use the record's provided procedures.)

b. Find a way to make a vector that compound? identifies as a compound. You may not use make-compound or compound-copy to build your new vector. However, you may use either procedure to create a helper compound from which you copy values.

Exercise 4: A Shirt Record

Write a set of definitions for a record type, shirt, to be used in a program that keeps track of the inventory of a clothing store. Provide fields for catalog number, intended gender of wearer, size, color, price, and quantity in stock. Only the last two fields should be mutable.

Exercise 5: Searching Shirts

Adapt the binary search procedure so that it takes two arguments -- a sorted vector, vec, of records of type shirt and a catalog number, catno -- and returns the entire record that contains that catalog number, if there is one in vec, or #f if there is no such record.

For Those With Extra Time

Extra 1: Sorting Shirts

Define a procedure that sorts a vector of records of type shirt into ascending order by catalog number.

Extra 2: Comparing Records

Write an expression that, through an appropriate call to mergesort, sorts a list of shirts by catalog number.

Extra 3: Sorting Shirts, Revisited

Rewrite your answer to the first sorting problem by using your answer to the previous problem.

 

History

Monday, 27 November 2000 [Samuel A. Rebelsky]

Monday, 30 April 2001 [Samuel A. Rebelsky]

Tuesday, 3 December 2002 [Samuel A. Rebelsky]

Tuesday, 29 April 2003 [Samuel A. Rebelsky]

Tuesday, 2 December 2003 [Samuel A. Rebelsky]

 

Disclaimer: I usually create these pages on the fly, which means that I rarely proofread them and they may contain bad grammar and incorrect details. It also means that I tend to update them regularly (see the history for more details). Feel free to contact me with any suggestions for changes.

This document was generated by Siteweaver on Tue Dec 9 13:59:18 2003.
The source to the document was last modified on Tue Dec 2 14:45:56 2003.
This document may be found at http://www.cs.grinnell.edu/~rebelsky/Courses/CS151/2003F/Labs/records.html.

Valid HTML 4.0 ; Valid CSS! ; Check with Bobby

Samuel A. Rebelsky, rebelsky@grinnell.edu