| Week | Topics | Resource links |
| Jan 6-10 | Week 1: getting started, intro to common lisp | |
| Course intro, administrivia | outline, exams/midterm/quizzes, | |
| What is the course actually about: | youtube, slides | |
| intro to functional programming | youtube, slides | |
| intro to common lisp | youtube, slides | |
| lisp types/checking | youtube, slides | |
| selection (if, cond) | youtube, slides | |
| Jan 13-17 | Week 2: lists in lisp | |
| basic function definitions (defun) | youtube, slides | |
| common errors | youtube | |
| blocks, let | slides, youtube | |
| No lecture Jan. 15th as Dave is unavailable | ||
| Jan 20-24 | Week 3: lists, recursion/tail recursion | |
| lists, sequences, arrays, vectors | youtube, slides | |
| example: checking validity of a list of pairs of reals | function implementation , automated test script | |
| list implementation/side effects | youtube, slides | |
| recursion, tail recursion | youtube, slides | |
| Jan 27-29 | Week 4: parameter handling, higher order functions, closures, lambda functions | |
| data structures as lists | youtube, slides | |
| parameter passing alternatives | youtube, slides | |
| parameter passing continued (keyword-based) | youtube, slides | |
| multiple return values | youtube, slides | |
| higher order functions | youtube, slides | |
| Feb 3-7 | Week 5: lambda, let-over-lambda, labels | |
| lambda functions | youtube, slides | |
| closures | youtube, slides | |
| let-over-lambda | youtube, slides | |
| labels and let-over-labels-over-lambda | youtube, slides | |
| Feb 10-14 | Week 6: dynamic scope, macros, parsing and grammars | |
| recap/review of let-over-lambda | ||
| lisp hashes | youtube, slides | |
| macros | youtube, slides | |
| Feb 17-21 | study week: no labs/lectures | |
| Feb 24-26 | Week 7: lisp wrapup, intro to grammars | |
| dynamic scope | youtube, slides | |
| symbols and properties | youtube, slides | |
| homoiconic languages and parsing lisp in lisp | youtube, slides | |
| the structure of functions |
youtube,
slides ***<= slides/video are gcl-based, sbcl is different ***
code example (sbcl-specific) | |
| Mar 3-7 | Week 8: regexes, tokenizing, lex | |
| Formal descriptions of languages | youtube, slides | |
| Regular expressions | youtube, slides | |
| apologies about the Wed lecture! | ||
| Mar 10-14 | Week 9: CFGs, augmented, tokenizing with lex | |
| Context free grammars | youtube, slides | |
| Augmented context-free grammars | youtube, slides | |
| lex and yacc (my old webnotes and some examples) | ||
| lex (tokenizer) | youtube, slides | |
| Mar 17-21 | Week 10: parsing and yacc | |
| yacc (parser) | youtube, slides | |
| Mar 24-28 | Week 11: attributes, binding, and types | |
| Attributes and binding | youtube, slides | |
| operators, precedence, associativity | slides, youtube | |
| Type compatibility/conversion | youtube, slides | |
| Primitive types | youtube, slides | |
| strings | slides, youtube, | |
| ordinal types | slides, youtube | |
| arrays | slides, C++ example, youtube | |
| records | slides, C++ example, youtube | |
| Mar 31-A4 | Week 12: blocks, selection, iteration, subroutines | |
| blocks | slides, C example, youtube | |
| selection | slides, youtube | |
| iteration | slides, youtube | |
| labels, conditionals, and control | slides, C example, youtube | |
| subroutines | slides, youtube | |
| parameter passing |
slides,
C example,
C++ example,
part 1: youtube part 2: youtube (a code look at variadic functions) | |
| higher order functions | slides, C++ example, youtube | |
| variadic functions in C/C++: (revisited) | youtube, slides sample code: C, C++ (simple variadic sum), C++ (reduce) | |
| Apr 7-11 | Week 13: macros, pointers, ADTs/OO, wrapup | |
| macros | slides, sample code, youtube | |
| pointers | slides, C++ example, youtube | |
| Smart pointers | slides, youtube | |
| C++ smart pointers |
C++ example (more current syntax than slides),
slides (but antiquated syntax),
youtube
External resource: Smart pointers (Alexandrescu, InformIT) | |
| Memory handling |
slides,
youtube
External resource: Dynamic memory handling (wikipedia) | |
| ADT features and support | slides, youtube | |
| OO features and support | slides, youtube | |
| Course wrap-up | details t.b.a. | |
| Extras if we get time | (not examinable if we don't get to them in lectures) | |
| pure functional programming vs common lisp | youtube, slides | |
| efficiency and lisp | youtube, slides | |
| parsing lisp in lisp revisited | youtube, slides | |
| more on hashes, sets, unions | slides, C++ example, youtube | |
| lisp file i/o, pipes | youtube, slides | |
| lisp misc: regex, timing, sleep, random #s, compiling, packages, catch/throw, gotos | youtube, slides | |
| Implementing dynamic/nested scopes | slides, youtube | |
| A truly different language | DreamBerd by TodePond | |
| C++ OO implementation |
slides,
youtube
(whoops: in slide 3, the definition of foo inside the class is incomplete, it was supposed to be returning x+i) | |
| Dynamic memory handling (a GNU malloc approach) |
memory organization: slides,
youtube
allocate/free algorithms: slides, youtube External resource: GNU malloc (sourceware.org) | |