Prerequisites and how to obtain them

Prerequisite courses

Another way of considering the prerequisites is to think of what we take from the contents:

Some ways of acquiring there prerequisites

Quick catchup on The Substitution Model, and The Environment Model

The usual presentations of this material are done for the Scheme programming language. One of the easiest Scheme tutorials for learning the basics of the language is "Teach Yourself Scheme in Fixnum Days by Dorai Sitaram. Chapters 1 through 6 introduce pretty much all of of the Scheme keywords used in the 91.301. Another useful quick introduction is the page at Cal Tech on "Scheme for C Programmers.

With the knowledge of basic Scheme from these documents, you could probably read a Scheme-oriented description of the Substitution model such as the one found here, or the two nodes of the online version of SICP starting here.

The same basic knowledge of Scheme allows you to read on The Environment Model. There is short tutorial from Cal Tech here, or the five nodes of the online version of SICP starting here.

If you happen to know the language Dylan, you can find notes on the substitution model for Dylan from Dartmouth here.

If you know a little bit of ML (very handy since we use ML later in 91.531) you could find notes on the substitution model in ML from Cornell: lecture7.htm and lecture8.htm. You can find Lecture and recitation notes on The Environment Model in ML from Cornell: lecture21-22.pdf, rec20.html, and rec21.html,

If you have to learn one of Scheme or ML to read the material on Substitution and Environment Models, you might considering learning ML early to save yourself time during the semester. In class we use Ullman's book "Elements of ML Programming" and assign sections 2, 3.1-3.5, 4.1, 5.1-5.6, and 7.1 (the readings page may have a more up-to-date list).

Quick catchup on interpreters

Any ideas?

Quick catchup on programming models

Quick catchup on proof

Craig Silverstein (now CTO of Google) wrote up some good notes on the basics of mathematical proof when he was an undergraduate, and has revised them slightly since. Here is the latest version that I could find. It is a bit terse in places, but reasonably comprehensible. Look especially at his section on structural induction.

Your ability to do basic proofs can be greatly enhanced by knowing a bit about propositional logic. Thomas LeBlanc of the university of Rochester wrote some succinct notes on propositional logic: basics, truth tables, and tautologies, laws for rewriting logical expressions (which tells you what proofs are equivalent), and using propositional logic to do formal proofs.

Or look in any Discrete Math textbook.

Quick catchup on other discrete math topics

Finding a Discrete Math book and looking over the relevant topics would be the best idea,

Quick catchup on topics from Formal Languages

These topics are also covered in most Discrete Math textbooks.

For regular expressions, a concise definition can be found in James Power's notes on Formal Language Theory and Parsing . The Wikipedia entry has some useful basic information before it gets into describing various implementations.

The first few subsections of Lars Marius Garshol's description of BNF and EBNF grammars could prove useful, but beware different authors have slightly different conventions: Garshol wraps non-terminal symbols with single quotes, while other authors may not wrap non-terminals but may wrap terminals with < and >. Similarly, Garshol represents "the empty string" with the @ sign, while other authors may use the Greek lowercase epsilon. Garshol separates the left and right sides of the grammar rules with :- where other authors may use ::- or ->. The discrepancies between different authors' notations are even worse when it comes to EBNF grammars. See also James Powers' writeup. You may need to reference Powers' page on regular grammars to get a running start at this page. You can find Wikipedia entries on BNF, and Formal Grammars

Non-course prerequisites

This course, like the other core courses in our curriculum involves regular, substantial homework assignments. Good study habits are an essential prerequisite!

If you can not work a substantial portion of the homework problems after attending lecture, reviewing the lecture notes, and reading the relevant assigned material then there is a problem. One problem endemic to students with jobs, relationships, children, or heavy academic loads is finding time to study.

Some standard advice for good study is: (1) Make sure you understand the lecture and reading as soon as possible after the lecture. (2) Make sure that you look over the homework assignments at least 5 days before they are due. (3) Allocate time for reading and homework using a few hours per day over many days. (4) If you find that someone who you ask for advice just gives you the answer, do not use that person for help in the future: you can not pass the course just be answering all the homework problems and you need to assimilate the material covered by the homework problems in order to pass the quizzes and final.

Some ways of acquiring there prerequisites

The Advising Center, part of the Centers for Learning and Academic Support offers frequent workshops on study skills, time management strategies, exam prep strategies, and more.