Basic Information

Course Objective

The objective is to learn various prevalent programming paradigms and to compare them in terms of the variant of approaches used, the thought process, representation of computation, etc in the context of various problem-solving tasks. In particular, The students would learn the fundamentals of each paradigm and how a difference in the paradigms affects programs.

Since the students are already exposed in a very elaborate way to imperative programming (and in particular object-oriented programming), substantially more time will be allotted to functional and logic programming in the course.

Learning outcomes would be:
  • Use the concepts and terms used to describe languages that support the imperative, functional, object-oriented, and logic programming paradigms.
  • To write programs in functional and logic programming languages using the features central to those paradigms, thereby obtaining a working knowledge of programming in those paradigms
  • Critically evaluate what paradigm and language are best suited for a new problem.


  • Introduction Different paradigms of programming: Imperative - Object Oriented - Functional - Logic Imperative and Object-oriented Programming - Role of Types - Static and Dynamic Type Checking - Scope rules ; Grouping Data and operations, Information Hiding and Abstract Data Types, Objects, Inheritance, Polymorphism,Templates.
  • Functional Programming - Expressions and Lists, Evaluation, types, type systems, values and operations, function declarations, lexical scope, lists and programming with lists, polymorphic functions, higher order and Curried functions, abstract data types.
  • Logic Programming - Review of predicate logic, clausal-form logic, logic as a programming language, Unification algorithm, Abstract interpreter for logic programs, Semantics of logic programs, Programming in Prolog.

Languages used will be OCaml and Prolog for the second and third module respectively.

Note that the first module is not being planned to be taught separately. Since the students have been exposed in detail to the object-oriented programming paradigm, we will be ensuring that most of the topics come in naturally in the third and fourth modules and will be discussed in those sections.


Programming Languages: Concepts and Constructs; 2nd Edition, Ravi Sethi, Pearson Education Asia, 1996.


  • Programming Languages: Design and Implementation (4th Edition), by Terrence W. Pratt, Marvin V. Zelkowitz, Pearson, 2000.
    • Programming Language Pragmatics, Third Edition, by Michael L. Scott, Morgan Kaufmann, 2009.

    We will do only a subset of these in the course !