MC27L Lab 1: Quilting (Spring 1997)

Due: Friday, February 28, at the beginning of class


This lab is based on sections 1.3 and 2.4 of the text, with one exercise from section 3.1. You should be able to make a good start on the lab using the material from chapter 1, and when you reach the point where you need to have read section 2.4, hopefully you'll have gotten there in class.

In this lab, you will build procedures that operate on rectangular images, rather than numbers. Using these procedures you'll produce geometric quilt patterns, such as the Repeating Crosses pattern shown on page 27 of the text.


Before coming to lab on Tuesday, read this handout and section 1.3 carefully. Think about the procedures you have to define, and how they might be accomplished. Don't worry if you can't figure them out in advance; you'll have an easier time once you've gained some experience playing around with the images in lab.

In lab

  1. To load into Scheme the definitions of the basic blocks, evaluate the following expression:
    (load "/Net/solen/u8/Faculty/ek/karl/Public/MC27/quilting")
    Now you should be able to see each block by evaluating its name. (When the value of an expression is an image, it is displayed in its own graphics window instead of printed out with ;Value:.) We have also included two solid blocks, black-bb and white-bb.

  2. The stack and quarter-turn-right procedures are built into our Scheme. Try them out as in exercise 1.8 on page 28 of the text, and make sure you understand what each does and how combinations behave. (We should point out here that the code from the book is available to you in files in the directory /Net/solen/u8/Public/Concabs, with the code from chapter 1 being in the file chap1.scm. Using these files will substantially reduce your typing.) Note that names such as rcross-bb continue to name the same, unmodified basic block throughout. The procedures give you back transformed copies of the image rather than changing the original image in any way. Write a precise description of what each of these two primitive procedures does.

  3. Do exercise 1.9 on page 28. (We'll bring the cardstock basic blocks to lab to help you think these through.)

    Rather than putting your procedure definitions in the main interaction window, it would be best to put them in a separate document. You can create a separate document on the SGIs with the New option of the File menu, and on the NeXTs with the New option of the Document menu. You can evaluate all of the definitions in a document by using the Evaluate All option of the Actions menu (either computer), or you can evaluate them one at a time and test as you go. Note that all the output from Scheme appears in the interaction window, not the document window.

  4. Do exercise 1.10 (page 29).

  5. Do exercise 2.13 (page 54-55).

  6. Do exercise 2.14 (pages 55).

  7. Do exercise 2.15 (pages 57-58). Note: be sure to carefully read the paragraph preceding exercise 2.15 before starting to program.

  8. Do exercise 3.3 (page 72).


Write a lab report that does a clear job of communicating your results to a reader who is generally knowledgeable about Scheme, but ignorant of what specific things you've done. Your report should include the procedures you wrote, illustrations of their results, and answers to the questions scattered throughout the ``In Lab'' section.

We've included two documents to give you a better sense for what we expect from your lab write-up. The first is a sample write-up for a much shorter lab. This sample write-up was done using Schematik (the Next version that preceded SchematiX) itself, which isn't much of a word processor, so the appearance isn't very fancy. However, we'd be satisfied with this. On the other hand, it isn't really very hard to make a fancier report using for example the WordPerfect word processor on the NeXTs, since you can easily have the computer copy both text and images from Schematik into WordPerfect. The lab assistants should be able to help you with the mechanics of this. Whatever you do, don't manually copy by retyping---students who do this inevitably make typos and wind up handing in procedures that couldn't possibly have worked. Another hint: if you do use WordPerfect, put your Scheme procedures into the ``Courier'' font. In this font, every character is the same width (like on a typewriter, or in the SchematiX program), so the indentation will line up correctly.

The other document to consult is entitled "Suggestions for clear lab reports in computer science courses", which pretty much says it all.

In general, be sure to read through your report and fix any problems you find, either in general presentation or in spelling and grammar. Not only do spelling and grammar errors detract from the clarity of your report, they suggest that you judged the report not to be worth the time to read. If you aren't willing to read your own report, who will be?

If you have time

  1. To produce your own basic blocks, see exercise 1.11 on pages 29-30. (Sorry, we don't have any way of providing graphical input to Scheme.)

  2. You may find other interesting ways to replicate images beyond pinwheeling and checkerboarding. For example, you could combine rotated versions of a basic block, some of which have been inverted and others not. You might also try using the built-in procedure mirror-image. Be creative!

Course labs web site:
One lab instructor: Karl Knight <>
The other lab instructor: Max Hailperin <>