CPS 343/543: Comparative Languages Lecture Notes


  1. Fundamentals ([EOPL] Preface, Ch 1)
    1. introduction, course objectives and outline, and programming language paradigms [A Brief Introduction to Lisp, about closures]
    2. formal languages and grammars (Backus-Naur form) (§1.1)
    3. functional programming in Scheme (λ-calculus and S-expressions) (§1.2) [installing & using PLT Scheme, functional programming resources, The Scheme Programming Language]
    4. functional programming in Scheme (building data structures, such as binary trees, with lists)
    5. functional programming in Scheme (let, let*, letrec)
    6. variable binding and scope (§1.3)

  2. Data abstraction ([EOPL] Ch 2)
    1. inductive data types and abstract syntax (§§2.1-2.2)
    2. representation strategies (list, abstract syntax, and procedural) (§§2.3-2.4)

  3. Environment-passing interpreters ([EOPL] Ch 3, [PIH] Ch 4, 5, 12)
    1. front end, conditional evaluation, and local binding (§§3.1-3.4) [The Roots of LISP]
    2. (non-recursive) procedures and closures (§3.5)
    3. recursion (§3.6)
    4. variable assignment (§3.7)
    5. parameter-passing mechanisms (§3.8)
    6. lazy evaluation and thunks (call-by-name and call-by-need; [EOPL] §3.8)
    7. lazy evaluation in Haskell [installing & using HUGS98] ([PIH] Ch 4, 5, 12)
    8. statements and side effects (§3.9)

  4. Types ([EOPL] Ch 4, [PIH] Ch 3, 7, 10, [EMLP] Ch 3, 5, 6, 8, [TLML])
    1. strong typing, type inference, and currying ([PIH] Ch 3, 7, [EMLP] Ch 3, 5) [installing & using SML-NJ]
    2. type systems (in Haskell; [PIH] Ch 10 and ML [structures, signatures, and functors]; [EMLP] Ch 6, 8)

  5. Control ([EOPL] pp. 241-243, §8.1, [TSPL] §§3.2-3.4, [TSS] Ch 13, 19)
    1. continuations and call/cc [about continuations] ([TSPL] §3.3, [TSS] Ch 13)
    2. tail calls ([EOPL] pp. 241-243, [TSPL] §3.2) and continuation-passing style ([EOPL] §8.1, [TSPL] §3.4, [TSS] Ch 19)

  6. Logic programming ([EOPL] §7.6)
    1. first-order predicate logic (Horn clauses, resolution, and unification; §7.6)
    2. logic programming in PROLOG (facts, rules, and goals) [A Brief Introduction to PROLOG, installing & using SWI-PROLOG, logic programming resources, Prolog Programming A First Course]
    3. logic programming in PROLOG (control and cut)

  7. Object-oriented programming ([EOPL] pp. 169-171, [QTOL])
    1. message passing, dynamic binding, and reflection (pp. 169-171)
    2. Smalltalk and Squeak ([QTOL]) [A Brief Introduction to Smalltalk, installing & using Squeak, object-oriented programming resources]
    3. course reflection (terms and themes; ACM A.M. Turing award winners with contributions related to languages)
Return Home