Topics for exam 1

This is intended to give you a sense of what I think is important from the course so far, and what I will be thinking of when creating the exam.

I hate disclaimers, but here are some anyway. This is not a contract. I may have inadvertently left something off this list that ends up in an exam question. I make no guarantees that the exam will be 100% limited to items listed below. Moreover, I will not be able to test all of this material given the time limitations of the exam. I will have to pick and choose some subset of it.

You are permitted one 8.5 x 11 sheet of paper with notes (both sides) for use as a reference during the exam.

Here are the specifics: Students should be able to...

Be able to write Racket functions on paper to do specified tasks. Specifically, students should be able to successfully make significant use of recursion. Lazy lists in particular are a more abstract idea beyond straightforward programming that students should be able to use and code as well. Any Racket code should be written in a purely functional style (no side effects).

Evaluate lambda calculus expressions, and define well-known logical or arithmetic operations on Church booleans or numerals. Students should be able to work through problems of the same style that were done for the lambda calculus homework assignment.

Write C functions on paper to do specified tasks, or answer questions about provided code. Specifically, students should be able to successfully make use of:

Be able to distinguish value model from reference model.

Be able to distinguish among stack and heap memory storage. For a known language (Racket, Python, Java, C), be able to identify whether a particular language characteristic relates to data stored in a stack or in a heap.

Be able to distinguish between a compiler and an interpreter, describe how each works in "classic" simple scenarios as well as in "hybrid" modern scenarios (such as with DrRacket and CPython), and reason about tradeoffs between them and ramifications of using one vs. another.