Programming Languages First Exam, 2014. Prof. Liang Huang (huang@cs.qc.cuny.edu) ------------------------------------------------ Covers the following topics: 1. Inductive Definitions and Functional Programming (6 pts) you should be able to understand and reason about inductive defintions. you should be able to do a proof by induction. you should be able to understand (but not write from scratch) basic Haskell. 2. Untyped Lambda Calculus (5 pts) basic concepts: observational equivalence, behaviorial equivalence, divergence. basic reductions: call-by-name, call-by-value, full-beta. 3. Subtyping and References (6 pts) you should understand subtyping rules, esp. those with reference types. you should understand subtyping rules of functions: co-variant and contra-variant. you should be able to reason about progress and preservation properties. 4. Featherweight Java (8 pts) you are assumed to be fluent in Java, including features not modeled by FJ, e.g., exceptions, interfaces, etc. you should be able to reason about progress and preservation properties. you should be able to write evaluation and typing rules for a variant of FJ. -------------------- The best resources to prepare for the first exam are: [1] our final exam in Fall 2013: http://acl.cs.qc.edu/~lhuang/teaching/PL/final/main.pdf Note: Everybody except Matteo got wrong on Problem 1 (inductive proof). It was easy but not trivial. [2] Benjamin Pierce's midterms and final exams (2002--2006). -------------------- I will have a recitation to go over [1] on Wednesday June 4 at 11am. Room TBD.