The course comes with a handy docker image which contains the necessary software to run OCaml, SWI-Prolog and the Jupyter notebooks, primarily through which the course is taught. The instructions for running the Jupyter notebooks is here.


Docker is a free software and is supported on all major platforms. The installation instructions for Docker is available here.

CS3100 Virtual Box Disk Image

If the Docker setup does not work for you for some reason, then an Ubuntu virtual box disk image (VDI) with the jupyter notebook is available here. The password is cs3100_m20. The course git repo has been cloned under cs3100_m20 in the home directory. As you go through the course, you will have to do git pull in the cs3100_m20 directory to get the latest updates from upstream.


My recommendation is to use the Jupyter notebook for the class and not install OCaml on your host machine. If you still want to, I would recommend installing OCaml through the OPAM package manager. The installation instructions for OPAM is here.


SWI-Prolog installation instructions are here.



  • 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



Lambda Calculus

  • Types and Programming Languages (TAPL), by Benjamin Pierce.
  • Peter Selinger’s lecture notes on lambda calculus 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.