Keith J. O'Hara

teaching

CMSC 305

Design of Programming Languages

overview | logistics | schedule | assignments | presentations | resources

Tentative Schedule (changes frequently)

week date topics readings work assigned language presentation
1 9/03/2019 History of Lisp; introduction; metaprograms syllabus; LISP 1.5 Programmer's Manual pg 1--14 (hello 'scheme)
9/05/2019 expressions sicp 1.1 prefix scheme*
9/06/2019 recursion sicp 1.2 lab 0: generating expressions
2 9/10/2019 higher order functions sicp 1.3 compose/curry/tap fortran/cobol
9/12/2019 closures lua 6; "Taste of Functional Programming" (lua 9.4); "An Experiment in Software Prototyping Productivity" Sec. 6.1; Evolution of Lua lua*
9/13/2019 functional geometry sicp 2.2.4; pict lab 1: functional geometry IPL/Piet
3 9/17/2019 lists sicp 2–2.1.3; 2.2–2.2.3 map/reduce algol/apl
9/19/2019 environments sicp 3.1–3.2 assoc/tables simula/smalltalk
9/20/2019 lexing; postfix sicp 3.3 lab 2: postfix interpreter forth*
4 9/24/2019 symbolic data 2.3.1 sym-diff snobol/awk
9/26/2019 differentation sicp 2.1.1 & 2.3.2 basic/logo
9/27/2019 lab 3: auto-diff
5 10/01/2019 eval/apply sicp 4.1.1–4.1.3 scheme in scheme pascal/ada
10/03/2019 environments sicp 4.1.3–4.1.6 intercal/sql
10/04/2019 scheme interpreter "(How to Write a (Lisp) Interpreter (in Python))" by Norvig lab 4: scheming python*
6 10/08/2019 lambda calculus "A small (yet Turing-equivalent) language" by Might; eopl 1 matlab/postscript
10/10/2019 macros; church encoding dybvig 3.1 & "Church Encoding in Scheme" by Might; Making Data Out Of Functions" from "JavaScript Allongé" by Braithwaite javascript*
10/11/2019 Exam 1
7 10/15/2019 Fall Break
10/17/2019 representation eopl 2.1–2.3 C++/bash
10/18/2019 define-datatype eopl 2.4–2.5 objective-c/hypertalk
8 10/22/2019 expressions eopl 3.1–3.2 sml/ocaml
10/24/2019 procedures eopl 3.3–3.5 erlang/coq
10/25/2019 scanning & parsing eopl appendix B lab 5: json tcl/ruby
9 10/29/2019 state (explicit ref) eopl 4.1–4.2 perl/mathematica
10/31/2019 implicit ref eopl 4.3–4.4 R/GP
11/01/2019 pratt parsing "Top Down Operator Precedence" by Crockford; "Lexical Analysis in Racket" by Might lab 5b: json II C#/F#
10 11/05/2019 streams sicp 3.5
11/07/2019 laziness; call by name, need & reference eopl 4.5; sicp 4.2 project proposal haskell/D
11/08/2019 lab 6: lazy lab scala/dart
11 11/12/2019
11/14/2019 nondeterminism sicp 4.3 agda/factor
11/15/2019 continuations "Continuations by Example" by Might; eopl 5.1 lab 7: continuations kotlin/rust
12 11/19/2019 trampolining eopl 5.2–5.3 clojure/nim
11/21/2019 exceptions eopl 5.4 go/groovy
11/22/2019 threads sicp 3.4; eopl 5.5 unlambda/swift
13 11/26/2019 Exam 2
11/28/2019 THANKSGIVING
11/29/2019
14 12/03/2019 logic programming sicp 4–4.4.1 prolog/befunge
12/05/2019 unification sicp 4.4.2–4.4.3; Norvig on Unification elixir/web assembly
12/06/2019 A unified approach to solving seven programming problems" by Byrd et al. lab 8: logic programming minikanren
15 12/10/2019 types eopl 7.1–7.3; typed racket purescript/typescript
12/12/2019 eopl 7.4; idris/julia
12/13/2019 project terra/hallide
16 12/17/2019 Final Project Presentations
12/19/2019
12/20/2019