Concepts and techniques for the design and implementation of large software systems that can be adapted to uses not anticipated by the designer. Applications include compilers, computer-algebra systems, deductive systems, and some artificial intelligence applications. Means for decoupling goals from strategy. Mechanisms for implementing additive data-directed invocation. Working with partially-specified entities. Managing multiple viewpoints. Topics include combinators, generic operations, pattern matching, pattern-directed invocation, rule systems, backtracking, dependencies, indeterminacy, memoization, constraint propagation, and incremental refinement. Substantial weekly programming assignments are an integral part of the subject.
There will be extensive programming assignments, using MIT/GNU Scheme. Students should have significant programming experience in Scheme, Common Lisp, Haskell, CAML or other "functional" language.
This subject is appropriate for undergraduates who have the prerequisite experience.
Prerequisites: 6.034, or comparable experience. Significant programming experience in functional languages recommended.
Time: MWF 11:00AM - Noon
Office Hours: Mondays 1:30-3:30pm near 32-385 or by arrangement. Email gjs or larsj.
Wed. 3/4/15: MIT Scheme on Athena updated: The version of MIT Scheme provided in the 6.945 Athena locker has been updated to the latest version, MIT Scheme 9.2.
Mon. 3/2/15: Minor changes to PS3 text: Based on
conversations during office hours, we fixed some minor typos
ps3.pdf. In particular, we (1) fixed the ordering of
the arguments in the sample call
make-generic-operation on page 1, (2) suggested using
add-rule! infrastructure when making your vector
arithmetic, and (3) asked you to support magnitude on vectors so that
3.3b can be tested. There have been no changes to the provided
code, and the updated pdf has been posted. Feel free to report any other bugs
with the problem set-- this is a new pset that we tested ourselves,
but you are the first set of students to work through it.
Wed. 2/11/15: Some students and I found a minibuffer bug in the
xscheme debugger used in Emacs that prevents one from submitting
expressions to evaluate in the debugger. This can be fixed by
definition to the bottom of your
Fri. 2/6/15: I've made a few minor changes to the provided
.emacs files. In particular, a few students were asking
about how to get the REPL style I used in lecture this morning: In
that style, the value is printed immediately below the expression
rather than being an interaction with a
=> prompt. To
enable this, the xscheme library must be loaded. I added
"xscheme") to the provided
.emacs file in the
don't panic guide and set the completion and documentation shortcuts
accordingly. Email larsj@ if you have further questions setting up
Wed. 2/4/15: If you didn't pick up a handout in class, please email your answers from the final page of the Red Tape Memo to firstname.lastname@example.org.