We will be sharing the lecture slides (jupyter notebooks) after each lecture. You can access at this github page.

We will be closely following two courses (1) CS3110 course at Cornell (2) an earlier offering of this course at IITM in Aug-Nov 2020 by KC Sivaramakrishnan.

Here are some additional references that you may find useful.


  • Functional Programming in OCaml, Cornell CS3110 textbook. Freely available here.
  • Real World OCaml, by Yaron Minsky, Anil Madhavapeddy and Jason Hickey. The book is freely available at
  • OCaml Manual - available here
  • For practicing programming in OCaml - see 99 Problems in OCaml

Lambda Calculus

  • Types and Programming Languages by Benjamin Pierce.
  • Lecture notes on Lambda Calculus - by Peter Selinger - available here.


  • Programming Languages, Concepts and Constructs, 2nd edition, by Ravi Sethi. Chapter 11.
  • The Art of Prolog, 2nd edition, Advanced Programming Techniques, by Leon Sterling and Ehud Y. Shapiro. Available for free here.


A docker image is setup for the course. It contains necessary software to run OCaml, SWI-Prolog and the Jupyter notebooks. More instructions for setting this up in your computers are available at this link. Please contact the team if you are facing issues with this. The assignment submissions require this setup and in fact, assignment 0 is meant just for ensuring you have set it up.