# Lab: Records

## Exercises

### Exercise 0: Preparation

a. Make a copy of `compound.ss`.

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

c. Start DrScheme.

### 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 `filter-by-color` that takes two arguments -- a list `ls` 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 `ls`.

### 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: Sorting Shirts

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

### Exercise 6: Searching Shirts

Adapt the binary search procedure so that it takes two arguments -- a vector `vec` of records of type `shirt`, sorted by the procedure defined in the previous exercise, 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.

## History

Monday, 27 November 2000 [Samuel A. Rebelsky]

Monday, 30 April 2001 [Samuel A. Rebelsky]

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

This page was generated by Siteweaver on Thu May 3 23:07:59 2001.
This page may be found at `http://www.cs.grinnell.edu/~rebelsky/Courses/CS151/2001S/records.html`.