- Sept 11, 2016: Course Page re-opens.
- Sept 18, 2016: Homework 1 released.
- Sept 19, 2016: FYI, I have swapped my lecture with Xusheng's tutorial this week. Hence Xusheng will give the tutorial on Wednesday morning while I will give lecture on Friday. Thanks for your understanding.
- Sept 28, 2016: Homework 3 released.
- Oct 12, 2016: Homework 4 released.
- Oct 17, 2016: Tutorial will be held on Wednesday while Friday will be lecture. Assignment 5 will be released on Wednesday.
- Oct 25, 2016: Homework 6 released, due the following Wednesday, before class. On Friday day, I will give the last lecture on Logic programming. Next Monday and Wednesday will be tutorials hosted by Xusheng. Next Friday during class will be our final exam.
- Nov 2, 2016: Tutorial 6 and 7 released. Also, all quiz solutions are released below as well.

**Lectures**: Mon, Wed, Fri 10:00-11:40,
Dongxiayuan 400.

**Instructor**: Kenny Zhu
- SEIEE 03-541 Phone: 3420-4592 Email: kzhu[at]cs[dot]sjtu[dot]edu[dot]cn

Office hours: by appointment via email or ask after class

**Teaching Assistant**:
Xusheng Luo

Email: freefish_6174[at]126[dot]com

Office hours: Thu 16:00-17:00

**Reference Textbooks**:

- Programming Languages Principles and Paradigms by Allen Tucker and Robert Noonan, McGraw Hill / 2009-5-1 (Also published by Tsinghua University Press and
available at the University Textbook Office).

- Practical Foundations for Programming Languages by Robert Harper, Cambridge University Press.

- Types and Programming Languages by Benjamin C. Pierce, The MIT Press.
- Programming Languages: Application and Interpretation by Shriram Krishnamurthi, Brown, Online.

**Assessment**:

- In-class quizzes: 10%
- Tutorial participation: 5%
- Assignments: 30-40%
- Project: 25% Project Website
- Exam (in-class test): 20-30%

Class | Date | Topic |
Slides | Resources | Homework |

1 | 9/12/2016 | Introduction | [pdf] | Tucker Ch.1 | |

2 | 9/14/2016 | Tutorial 1 | [pdf] | Project description | |

3 | 9/18/2016 | Inductive Definition and Proofs | [pdf] | Harper Ch. 1-4 | hw1 (pdf) hw1 (tex) |

4 | 9/19/2016 | Untyped Lambda Calculus | [pdf] | Pierce Ch 5, 8, 9 | |

5 | 9/21/2016 | Tutorial 2 | [pdf] | Assignment 1 | |

6 | 9/23/2016 | Untyped Lambda Calculus (II), Simply-typed Lambda Calculus | [pdf] | Pierce Ch 5, 8, 9 | hw2 (pdf) hw2 (tex) |

7 | 9/26/2016 | Extension to Simply-typed Lambda Calculus (I) | [pdf] | Pierce Ch. 11 | |

8 | 09/28/2016 | Extension to Simply-typed Lambda Calculus (II) | [pdf] | Pierce Ch. 11 | hw3 (pdf) hw3 (tex) |

9 | 09/29/2016 | Tutorial 3 | [pdf] | Assignment 2 | |

10 | 10/9/2016 | Going Imperative | [pdf] | Pierce Ch. 12 | |

11 | 10/10/2016 | Memory Management | [pdf] | Tucker Ch. 11 | |

12 | 10/12/2016 | Type Inference (I) | [pdf] | Pierce Ch. 22, 23 | hw4 (pdf) hw4 (tex) |

13 | 10/14/2016 | Tutorial 4 | [pdf] | Assignment 3 | |

14 | 10/17/2016 | Type Inference (II) | [pdf] | Pierce Ch. 22, 23 | |

15 | 10/19/2016 | Tutorial 5 | [pdf] | Assignment 4 | |

16 | 10/21/2016 | Subtyping | [pdf] | Pierce Ch. 15 | hw5 (pdf) hw5 (tex) |

17 | 10/24/2016 | Object-Oriented Programming | [pdf] | Tucker Ch. 14 | |

18 | 10/26/2016 | Functional Programming | [pdf] | Tucker Ch. 14 | hw6 (pdf) hw6 (tex) |

19 | 10/28/2016 | Logic Programming | [pdf] | Tucker Ch. 15 | |

20 | 10/31/2016 | Tutorial 6 | [pdf] | Assignment 5 | |

21 | 11/02/2016 | Tutorial 7 | [pdf] | Assignment 6 | Quiz 1 Quiz 2 Quiz 3 Quiz 4 Quiz 5 Quiz 6 |