CS3100 - Paradigms of Programming

Course Timings

  • Lectures: Slot E (Tue 11 AM, Wed 10 AM, Thu 8 AM), SSB 134.
  • Course Contact Hour: Fri 5 PM, SSB 134.

Course Overview

The goal of this course is to introduce students to different styles of programming languages. Specifically, we will study functional programming through OCaml, and logic programming through Prolog. We will see how the choice of a programming language can shape the process of organizing the computation required to solve a programming task. We will also understand what are the core features required in any turing-complete programming language, and which features are “syntactic sugar”. At the end of the course, students will have gained a better understanding of the differences between programming languages, how to choose an appropriate programming language for a task, how to quickly learn new languages and potentially design languages suitable for a system. The official course description is here.

Course Contents

  • Functional Programming in OCaml - Expressions, Functions, Datatypes, Pattern Matching, Higher-order programming, Lambda Calculus: Syntax, semantics, encodings, STLC, Side effects, Modular Programming, Streams, Monads, GADTs

  • Logic Programming in Prolog - Logical Foundations, Lists in Prolog, Control in Prolog, Mutable data structures, Generate and Test, Cuts and Negation, Countdown, Type inference, Graph Search, Database Programming, Constraint Logic Programming

Grading Policy

  • Assignments [Total 6, 3% + (5 * 9%)]: 48%
  • Quiz 1 and 2: 11 % each
  • Endsem Exam: 30%

Acknowledgements

The course heavily borrows material from an earlier offering by KC Sivaramakrishnan and the course CS3110 from Cornell University.