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

This page contains links for most of the supporting videos, slides, examples, and notes for Dave's 2023 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 isn't likely to be complete this semester. 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 8-12 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 15-19 Week 2: lists and recursion
blocks, let slides, youtube
lists, sequences, arrays, vectors youtube, slides
Snow day Wed the 17th
Jan 22-26 Week 3: tail recursion, function parameters, scope
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
recursion, tail recursion youtube, slides
Jan 29-F2 Week 4: higher order functions, lambda functions, let-over-lambda
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
parameter passing alternatives youtube, slides
Feb 5-9 Week 5: parameters cont., return values, macros
parameter passing continued (keyword-based) youtube, slides
multiple return values youtube, slides
macros youtube, slides
Feb 12-16 Week 6: lisp wrapup, parsing and grammars
loops youtube, slides
structures youtube, slides
hashes youtube, slides
symbols and properties youtube, slides
dynamic scope youtube, slides
efficiency and 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 19-23 study week: no labs/lectures
Feb 26-M1 Week 7: intro to grammars, midterm Wed.
homoiconic languages and parsing lisp in lisp youtube, slides
prep for midterm
MIDTERM FEB 28
Mar 4-8 Week 8: Dave sick most of the week (sorry!)
Mar 11-15 Week 9: grammars, parsing, lex/yacc
Formal descriptions of languages youtube, slides
Regular expressions youtube, slides
Context free grammars youtube, slides
Mar 18-22 Week 10: grammars, attributes and binding
Augmented context-free grammars youtube, slides
lex and yacc (my old webnotes and some examples)
lex (tokenizer) youtube, slides
yacc (parser) youtube, slides
Ambiguity and precedence
Attributes and binding youtube, slides
Mar 25-29 Week 11: data types
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
Apr 1-5 Week 12: functions, variants, macros
University closed Apr 1, no labs/lectures
records 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)
macros slides, sample code, youtube
Apr 8-12 Week 13: pointers, blocks/control, course wrapup
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)
blocks slides, C example, youtube
selection slides, youtube
iteration slides, youtube
labels, conditionals, and control slides, C example, youtube
Course wrap-up details t.b.a.
Extras if we get time (not examinable otherwise)
Memory handling slides, youtube
External resource: Dynamic memory handling (wikipedia)
hashes, sets, unions slides, C++ example, 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)
lisp file i/o, pipes youtube, slides
lisp misc: regex, timing, sleep, random #s, compiling, packages, catch/throw, gotos youtube, slides
Dynamic memory handling (a GNU malloc approach) memory organization: slides, youtube
allocate/free algorithms: slides, youtube
External resource: GNU malloc (sourceware.org)
Implementing dynamic/nested scopes slides, youtube
ADT features and support slides, youtube
OO features and support slides, youtube
A truly different language DreamBerd by TodePond

Back to the main course page