CSCI 330 Programming Languages Spring 2025
Supporting Resources (videos, slides, notes, examples)

This page contains links for most of the supporting videos, slides, examples, and notes for Dave's 2026 spring offering of CSCI 330.

The slides were made/videos were recorded during the 2020/2021 offerings when we were using gnu common lisp (gcl). We have now switched over to steel bank common lisp (sbcl), which does involve changes in a handful of functions and libraries and a few syntax tweaks. The goal is to update the slides and videos as time permits, but that seems to be a slow and ongoing process. I've posted a large collection of sample code and explanation for both versions:
the new sbcl version
the old gcl version

If you're looking for textbooks that go deeper into lisp and functional programming, a couple of the best are
  - "Practical Common Lisp", by Peter Seibel
  - "On Lisp" or "ANSI Common Lisp" by Paul Graham

I've listed the topics in roughly the order I hope to cover them, and roughly grouped them by week. Some weeks there's a little extra material, some weeks a little less, and the timeline is likely to evolve/change as the semester progresses.

While I do plan on keeping the lectures/labs in synch with the slide/video material as much as possible, there will certainly be significant content differences between the posted content and the actual live lectures. This material is not intended to replace in-class attendance, but rather to act as extra aids/study/support material, especially for any students who might find it necessary to isolate at home at some point in the semester.

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)

Back to the main course page