CSC324 — Content

Preparation

CSC 207

You will see at least 3 new languages in CSC 324, with more differences from Java and Python than Java and Python have from each other. Your ability to explore a new language yourself will be crucial. If you're unclear what happens while a Java or Python program is running (e.g. you haven't absorbed some form of Memory Model for each) you will have a lot of trouble with the new languages in CSC 324. In particular, if you tried to get by memorizing certain source code "patterns" instead of tracing your code, it will be impossible to cope with the languages of CSC 324.

CSC 236

Many of the ideas in CSC 236 are related to what we do in CSC 324, though we won't use any of it specifically.

You've covered recursion in CSC 148/150, but CSC 236 gives you more practice with it in the guise of induction.

Propositional and predicate logic give you more practice with languages. CSC 236 discusses their syntax and semantics, given and reasoned about recursively. All programming languages have a recursive syntax and semantics, and in CSC 324 we expect you to be comfortable with this. Java/Python/Scheme/etc code is syntactically tree structured, and you should be able to easily see it as such. The semantics (meaning) of the code is derived from recursive traversal of this tree, in a mixture of bottom-up and top-down processing of the sub-expressions.

There's also the intellectual maturity of handling higher levels of abstraction: the programming we do will require more imagination and planning than you're used to (especially if you're used to programming by semi-blind trial and error).

Two years of CS

CSC 324 is a 3rd year course. The depth and breadth of the workload, as well as the independence and creativity expected of you, is more than in a typical 2nd year course. In particular, if CSC 207 or CSC 236 gave you trouble, CSC 324 will likely give you more.

Lecture Summaries

The Essence of Computation in Scheme.

Functional Programming and Higher-Order Functions in Scheme.

Environments, Scopes and Closures in Scheme.

More Scheme and general Programming (removing repetition): Local Variables, Multi-way Conditionals and Refactoring.

Linear Recursion on Lists in Human and Scheme.

Scheme Symbols, Equality and Quoting.

Branching Recursion and Pattern Matching in Human and Scheme.

Mimicing various calling modes in Scheme.

Macros in Scheme.

More about syntax-rules in Scheme.

Prolog Part 1 (from 2006W).

Prolog Part 2 (from 2006W).

Prolog Cut (traditional CSC 324 notes): 2up.ps ; 2up.pdf; 4up.ps; 4up.pdf; 8up.ps; 8up.pdf.

Grammars, Part 1 (traditional CSC 324 notes): 2up.ps; 2up.pdf; 8up.ps; 8up.pdf.

Grammars, Part II (traditional CSC 324 notes): 2up.ps; 2up.pdf; 8up.ps; 8up.pdf.

ML Types from these traditional CSC 324 notes: Part I; Part II; Part III.

Tutorial Notes

Syntax-rules.

Prolog (traditional CSC 324 notes).

CFGs. (traditional CSC 324 notes).

ML Types: sections 3 and 5 were covered (traditional CSC 324 notes).

References

General

Can Programming Be Liberated from the von Neumann Style? by John Backus. Read the background on Backus, the abstract, sections 1, 3 and 4 for some useful history of programming. "Those who do not learn from history are doomed to repeat it". Notice the date!
Hitting the High Notes, by Joel Spolsky. Read at least the portion from "But I still haven't proven anything" to "5:1 or 10:1 productivity differences between programmers".

Scheme

General information: Schemers.org.
Reference: "The Scheme Programming Language", 3rd edition.
IDE: DrScheme. Select language R5RS.
The R5RS standard.
Google archive of comp.lang.scheme.

Prolog

Getting started with SWI Prolog on CDF.