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 2025 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 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
basic function definitions (defun) youtube, slides
common errors youtube
Jan 13-17 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
data structures as lists youtube, slides
Jan 20-24 Week 3: tail recursion, function parameters, higher order functions
recursion, tail recursion youtube, slides
parameter passing alternatives youtube, slides
parameter passing continued (keyword-based) youtube, slides
multiple return values youtube, slides
higher order functions youtube, slides
lambda functions youtube, slides
Jan 27-29 Week 4: closures, lambda functions, let-over-lambda
closures youtube, slides
let-over-lambda youtube, slides
labels and let-over-labels-over-lambda youtube, slides
...practice with lol...
Feb 3-7 Week 5: advanced features
loops youtube, slides
structures youtube, slides
hashes youtube, slides
symbols and properties youtube, slides
dynamic scope youtube, slides
Feb 10-14 Week 6: macros, parsing and grammars
macros youtube, slides
efficiency and lisp youtube, slides
homoiconic languages and parsing lisp in lisp youtube, slides
the structure of functions youtube, slides ***<= these slides/video are gcl-based, sbcl is quite different in this regard***
parsing lisp in lisp revisited youtube, slides
pure functional programming vs common lisp youtube, slides
Feb 17-21 study week: no labs/lectures
Feb 24-26 Week 7: intro to grammars
Formal descriptions of languages youtube, slides
Regular expressions youtube, slides
Context free grammars youtube, slides
Augmented context-free grammars youtube, slides
Mar 3-7 Week 8: parsing, lex/flex and bison/yacc, intro to attributes
lex and yacc (my old webnotes and some examples)
lex (tokenizer) youtube, slides
yacc (parser) youtube, slides
Attributes and binding youtube, slides
operators, precedence, associativity slides, youtube
Mar 10-14 Week 9: types and conversions
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 17-21 Week 10: blocks and iteration, intro to subroutines
blocks slides, C example, youtube
selection slides, youtube
iteration slides, youtube
labels, conditionals, and control slides, C example, youtube
subroutines slides, youtube
Mar 24-28 Week 11: subroutines, macros
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 31-A4 Week 12: macros, smart pointers, memory
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)
Dynamic memory handling (a GNU malloc approach) memory organization: slides, youtube
allocate/free algorithms: slides, youtube
External resource: GNU malloc (sourceware.org)
Apr 7-11 Week 13: OO, course wrapup
ADT features and support slides, youtube
OO features and support slides, youtube
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)
Course wrap-up details t.b.a.
Extras if we get time (not examinable if we don't get to them in lectures)
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

Back to the main course page