This course will discuss important concepts and language features to support (i) functional programming and (ii) logic programming. Specifically: (i) The first half of the course will cover functional programming techniques and constructs such as recursive definitions, higher-order functions, type inference, polymorphism, abstract data types, and modules. The programming exercises will illustrate the utility of list-processing, pattern matching, abstraction of data/control, strong typing, and parametrized modules (fucntors). We will also study the mathematical reasoning (induction) involved in the design of functional programs and for proving properties about functions so defined. The programming assignments will be coded in SML '97 (Standard ML of New Jersey) and Haskell. (ii) The second half of the course will cover logic programming paradigm and Prolog. We discuss the syntax and the semantics of Prolog, the workings of a Prolog interpreter, and various applications of Prolog. We consider the use of declarative programming and pattern matching for database querying, parsing, meta-programming, and problem solving in AI. The programming assignments will be coded in XSB and/or SWI_Prolog.
College of Engineering and Computer Science