6.001 - Structure and Interpretation of Computer Programs
Fall 2005

Welcome to 6.001!

This page is your entry to the course material. It includes current announcements of the course, pointers to other sources of information such as the online textbook, the course calendar, the programming projects, and the entry point to the online tutor system.

Resources for course material.

    This term we are providing several resources for the course material for you.
  • You can reach the online version of the text book (see the link below).
  • You can use the lecture based "text book" by going to the tutor, clicking on the Lecture link, and then for each lecture, using the "lecture slides in pdf" link. This provides you a version of the slides of the online lectures, together with associated text descriptions. While these lectures are NOT identical to the live lectures, they cover similar material and give you a different perspective.
  • You can access copies of the lectures slides of the actual live lecture, by clicking on the lecture link in the course calendar (see link below). Note that these will typically be posted after the actual lecture.

Current announcements

  • Posted, December 15: Prizes in Project 4

    We had a lot of great submissions for the contest for Project 4, in which you were invited to extend the Object Oriented world in an interesting way. After a lot of agonizing, Prof. Grimson selected the following entries for prizes (these can be picked up from Prof. Grimson's office (38-401) starting on Monday). There were many other very intriguing submissions, and we are sorry we can't offer prizes for all of them.

    • Christopher Moh created a battle game within a maze setting. It included multiple monsters that become more difficult to defeat with time, multiple spells, multiple levels, mapping capabilities, and a whole lot more!
    • Advay Mengele created a different battle system, using scripting system to leverage callbacks. The system followed a storyline and involved multiple tasks to be accomplished by the hero, and multiple levels to explore.
    • Jessica Nesvold incorporated space invasions, including a space ship, aliens, teleporters, and docking stations.
    • Steven Kim created a very nice GUI adaptation of Hairy Cdr, complete with 3D map, and a full-fledged interface.
    • Jim Wilberger added an elegant combat extension to the game. The player has a choice of three different kinds of avatars, leading to a different set of options for the player as the game progresses.
    • Ruth Dhanaraj added a wide range of characters and physical elements from the real Harry Potter series.
    • Huy Nguyen implemented networking code into the game, allowing it to be played simultaneously by two players.
    • Michael Kennedy added time machines to the system in a very elegant way.
    • Patricia Martinez added a course major system to the game. Characters from different courses have different rivalries (15 hates 6, 6 hates 15, 18 sides with 6, 7 hates trolls, 17 hates professors and so on).
    • Scot Frank extended his system to allow for browser interactions and Athena interactions. Objects called "athena-workstations" would allow the avatar to login, enter commands, or Google the "workstation" (through an actual connection to Athena and a real Google).
    • Justin Curry implemented the Enneagram personality test as a game, where the avatar progresses through a tower answering questions at each of its 105 levels to work towards a comprehensive personality assesssment at the very top.
    • Eric Price also created a very elegant time machine. Not only could the holder jump back in time, but the player can actuallycontrol both the present and the past avatar.
  • Posted, December 7: Final Exam reminder

    Final exam is Fri, Dec. 16, 1:30 to 4:30, Johnson. Exam is closed book, but you may bring 3 pages of notes (8.5 by 11 inches, both sides) with you to the exam.

  • Posted, December 5: Project 5 errata

    There is an unfortunate typographical error in Project 5. The test case for Problem 3 on page 4 should be

    (let ((x '()))
      (loop (set! x (cons '* x))
            (display x)
        until (> (length x) 3)))
    (*)(* *)(* * *)(* * * *)
    ;M-eval value: done

    Also, if you are attempting the optional final problem, note that the suggested code (which you do not necessarily need to use) makes use of the procedure symbol-append. However, DrScheme does not supply this procedure, so here is a definition:

    (define symbol-append
      (lambda symbols
         (apply string-append
                (map symbol->string symbols)))))

  • Posted, December 2: Project 5 released

    The final project for the term is now available on the projects web page. This is a shorter project since it is due in 1 week.

  • Posted, November 26: Project 4 minor correction

    In the code for an autonomous person code, there exists this fragment:

          (lambda ()
            (let ((exit (random-exit (ask self 'LOCATION))))
              (if (not (null? exit)) (ask self 'GO-EXIT exit))))
    This has a subtle bug which will not appear in the normal running of the code. In particular, random-exit uses pick-random which returns #f if the list passed to it is empty. Hence, if there are no exits, exit is #f and eventually the code will call
    (ask exit 'USE self)
    which will throw an error since exit is #f. In the normal running of the system, this is not a problem, since every place has exits, but it is possible that this will cause problems in the extensions when there might be places with no exits. One fix is to replace (not (null? exit)) with (not (eq? exit #f)).

  • Posted, November 21: Project 4 minor correction

    In the code for screen-object, the expression 'location should be 'LOCATION, i.e., there is a case error.

  • Posted, November 20: Project 4 minor correction

    There is one location in the code for Project 4 that includes a call to the pp procedure. This is a "pretty-print" procedure that exists in MIT Scheme, but not DrScheme. Simply replace this procedure call with a call to display or print.

  • Posted, November 14: Project 4 released

    See the Projects link to access a copy of the project. Note the change in due date to a later date.

  • Posted, October 23: DrScheme bug A number of students have run afoul of a bug in DrScheme, in which it is sometimes difficult to read back in a .scm file that had previously been saved. This has apparently been fixed in the more recent release of DrScheme. Hence if you are having difficulties, you may want to load release 299.400 (instead of earlier releases) of DrScheme.

  • "Structure and Interpretation of Computer Programs", the text for the course, is available online (link below), or at Quantam Books, for about $52. It is also available at the MIT Coop.
  • During recitations on September 7th, we will be gathering information which we will use to assign recitation sections. For that first day of recitation, please attend the recitation to which the registrar assigned you (except for the 9:00 AM recitation, which is cancelled; if you were assigned to that section, please attend any other section, held in the same room at 10, 11, 12, 1 or 2). The new assignements, based on our reorganization, will be posted on this web site web later on Wednesday, or possibly Thursday. Starting Friday, September 9th, please attend the recitation to which WE assign you, based on those posted assignments. If you have a conflict with our assignment and only if you have a conflict with that time then you should contact the course secretary by email to arrange for a new assignment. During recitation you will complete an informational form that will help us assign tutorials. Do not email the course secretary about section changes until after sections are posted.

Complete list of previous announcements

Getting help in 6.001

    Just a reminder that the Lab Assistants in the 6.001 Lab are often available to provide help with course material. This is especially true if you visit the lab during non-peak hours (i.e. not right before a project is due)! See

    How to get help/Staff hours for lab

    for staffing hours.

Additional resources

The following links contain information that is of value in understanding the content and organization of the course

How to get help/Staff hours for lab

General information
Course objectives and expected outcomes
Projects and project information

Online version of the textbook, courtesy of MIT Press

Don't Panic Handout
How to write up a project
Policy on collaborative work
Records of previous terms
Download scheme

Log in to the on line tutor
User Name:
If you do not yet have a tutor account, please register here first.

Send comments about this site to welg@csail.mit.edu.
Copyright © 1997-2005 by Massachusetts Institute of Technology. All rights reserved.