• A
  • A
  • A
  • ABC
  • ABC
  • ABC
  • А
  • А
  • А
  • А
  • А
Regular version of the site
Bachelor 2022/2023

Functional and Logic Programming

Category 'Best Course for Broadening Horizons and Diversity of Knowledge and Skills'
Category 'Best Course for New Knowledge and Skills'
Type: Elective course (Software Engineering)
Area of studies: Software Engineering
When: 3 year, 1, 2 module
Mode of studies: offline
Open to: students of all HSE University campuses
Instructors: Dmitry V. Soshnikov
Language: English
ECTS credits: 5
Contact hours: 60

Course Syllabus

Abstract

The course presents two programming paradigms: functional programming and logic programming. Most of the attention is given to functional programming, as more useful in practice. The importance of learning other programming paradigms cannot be underestimated: it helps students to look at problems from different viewpoints, to attempt different ways of problem decomposition, as well as to use more appropriate tools (eg. functional and logic programming languages) for some of the problems. Students learn the mathematical basics and underlying algorithmic model of functional and logic languages, thus understanding deeper relationship between mathematical models and programming languages and their semantics. Most importantly, they also get experience in practical functional programming using F# programming language, which gives them useful practical tool for many data processing tasks. The course is designed for students of the bachelor program "Software Engineering" at the Faculty of Computer Science, HSE.
Learning Objectives

Learning Objectives

  • Students should get practical experience using most widely used functional and logic programming languages: F# and Prolog
  • Students will understand different programming paradigms and the relationship between programming paradigm and underlying mathematical computational model
  • Students will understand different approaches to solving problems: functional decomposition and declarative programming.
Expected Learning Outcomes

Expected Learning Outcomes

  • get practical experience using most widely used functional and logic programming languages: F# and Prolog
  • Identify those problems and estimate the appropriateness of using functional/logic programming; design software systems using multi-paradigm approach
  • understand different approaches to solving problems: functional decomposition and declarative programming.
  • understand different programming paradigms and the relationship between programming paradigm and underlying mathematical computational model
  • Understand the relationship between first-order predicate logic / lambda-calculus with programming languages and the process of computation
  • understand the relationship between first-order predicate logic / lambda-calculus with programming languages and the process of computation
  • Use functional/logic programming languages for solving practical problems in the areas where it is appropriate
  • Use more declarative and pure programming style with higher order abstractions, effectively use functional features of modern programming languages (eg. LINQ).
Course Contents

Course Contents

  • Introduction to Functional Programming
  • Algebraic Data Types – Lists and Trees
  • Lambda-Calculus as a Computational Model
  • Lambda-Calculus as a Programming Language
  • Functional Programming Techniques
  • Monads, Metaprogramming, Parallel and Async Programming
  • Object-Oriented and Imperative Features of F#.
  • Functional Aspects of Modern Programming Languages
  • Overview of Popular Functional Programming Languages: Haskell, Lisp, Erlang
  • Type Providers and Data Processing in F#
  • Introduction to Logic Programming
  • Resolution. Definite Clause Logic. Logic Programming with and without Negation using SLD Resolution
  • Logic Programming Techniques. Solving Logical Problems.
  • Typing in Functional and Logic Programming. Programming Language Semantics for Functional and Logic Languages
Assessment Elements

Assessment Elements

  • non-blocking Homework Assignment 1 (HW1)
  • non-blocking Homework Assignment 2 (HW2)
  • non-blocking Mid-Term Test (M)
  • non-blocking Final Exam (E)
Interim Assessment

Interim Assessment

  • 2022/2023 2nd module
    0.4 * Final Exam (E) + 0.3 * Mid-Term Test (M) + 0.15 * Homework Assignment 1 (HW1) + 0.15 * Homework Assignment 2 (HW2)
Bibliography

Bibliography

Recommended Core Bibliography

  • John Harrison. (1997). Introduction to Functional Programming. Retrieved from http://search.ebscohost.com/login.aspx?direct=true&site=eds-live&db=edsbas&AN=edsbas.E0482041

Recommended Additional Bibliography

  • Okasaki, C. (1998). Purely Functional Data Structures. Cambridge, U.K.: Cambridge University Press. Retrieved from http://search.ebscohost.com/login.aspx?direct=true&site=eds-live&db=edsebk&AN=502386

Authors

  • SOSHNIKOV DMITRIY VALEREVICH
  • MELIKYAN ALISA VALEREVNA
  • Петрухина Анастасия Сергеевна