# CS4536/CS536: Programming Languages (A/Fall 2014)

## Lectures

You do not need to purchase a textbook. For much of the course, we
will use Programming
Languages: Application and Interpretation (2012 edition), which is available
online. Some later material will come from published papers. Some
will come from custom notes. Links will be provided as needed.

**Date** | **Topic** | **Chapters and
Notes** |

Oct 14 | Lambda Calculus, Course Evals | Textbook
first edition, chapter 22 |

Oct 10 | Model Checking | Separate Notes |

Oct 7 | Typing Objects, Polymorphism | 15.3.1, 15.3.8 |

Oct 3 | Type Inference | Textbook
first edition, chapter 30 |

Sep 30 | Termination and Type
Soundness | 15.2.3.2, 15.2.7 |

Sep 26 | Introduction to Type
Checking | 15.1-15.2.3, 15.2.6 |

Sep 23 | Objects | 10 |

Sep 19 | Recursion, Laziness | 9, 17.1 |

Sep 16 | Mutating Structures, Mutating Variables,
Passing Parameters | 8 |

Sep 12 | Intro to Mutating Structures | 8 |

Sep 9 | First-Class Functions, Top-level definitions,
hint of recursion | 6 and 7 |

Sep 5 | Delayed Substitution; First-Class Functions | 6 and 7 |

Sep 2 | Substitution; Functions | 4 and 5 |

Aug 29 | Overview; Modeling Languages, Basic Interpreters | 1, 2, and 3 |

## Racket Crash Course

For a really crash course (that might be enough combined with the
text and lecture notes), see these two examples of
functions over lists. I've added comments to help you know what
to take from these examples.

For a bit more detail, the Racket Documentation provides a basic
overview of Racket. Note that this overview does not include
the typing aspects of `plai-typed`

-- use lecture and the
textbook for those details. Adding types affects the operators used
to build lists (in section 2.4 of the tutorial): in plain Racket,
`(list 1 2 3)`

and `'(1 2 3)`

are equivalent,
but in `plai-typed`

, the first produces data of type
`(listof number)`

and the second produces data of type
`s-expression`

. We will discuss the difference in
lecture. Unless you are writing input to a parser, use
`list`

or `cons`

to create lists.