| Week | Topics | Resource links |
| Jan 5-9 | 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 | |
| basic function definitions (defun) | youtube, slides | |
| common errors | youtube | |
| Jan 12-16 | Week 2: lists in lisp | |
| blocks, let | slides, youtube | |
| 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 | |
| Jan 19-23 | Week 3: lists, recursion/tail recursion | |
| recursion, tail recursion | youtube, slides | |
| data structures as lists | youtube, slides | |
| parameter passing alternatives | youtube, slides | |
| parameter passing continued (keyword-based) | youtube, slides | |
| multiple return values | youtube, slides | |
| Jan 26-30 | Week 4: higher order functions, closures, lambda functions | |
| higher order functions | youtube, slides | |
| lambda functions | youtube, slides | |
| closures | youtube, slides | |
| let-over-lambda | youtube, slides | |
| labels and let-over-labels-over-lambda | youtube, slides | |
| Feb 2-6 | Week 5: more lisp features and functionality | |
| lisp hashes | youtube, slides | |
| macros | youtube, slides | |
| 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) | |
| Feb 9-13 | Week 6: formal language descriptions | |
| Formal descriptions of languages | youtube, slides | |
| Regular expressions | youtube, slides | |
| Context free grammars | youtube, slides | |
| Augmented context-free grammars | youtube, slides | |
| Feb 16-20 | study week: no labs/lectures | |
| Feb 23-27 | Week 7: review, midterm | |
| Monday: review/prep for midterm | ||
| Wednesday: review/prep for midterm | ||
| Mar 2-6 | Week 8: regexes, tokenizing, lex | |
| lex and yacc (my old webnotes and some examples) | ||
| lex (tokenizer) | youtube, slides | |
| yacc (parser) | youtube, slides | |
| Mar 9-13 | Week 9: attributes and binding, primitive 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 | |
| Mar 16-20 | Week 10: composite types, basic blocks and control | |
| arrays | slides, C++ example, youtube | |
| records | slides, C++ example, youtube | |
| blocks | slides, C example, youtube | |
| selection | slides, youtube | |
| iteration | slides, youtube | |
| labels, conditionals, and control | slides, C example, youtube | |
| Mar 23-27 | Week 11: functions, macros | |
| 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) | |
| macros | slides, sample code, youtube | |
| Mar 30-A3 | Week 12: pointers and memory management | |
| 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 | |
| Apr 6-10 | Week 13: macros, pointers, ADTs/OO, wrapup | |
| no labs/lectures Monday April 6, VIU closed for statutory holiday | ||
| Course wrap-up, review, and prep for final exam | ||
| Apr 13-22 | VIU Final Exam period: date, time, and location of final exam TBA | |
| 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) | |