Title:  Functional and Logic Programming 

Code:  FLP 

Ac.Year:  2019/2020 

Sem:  Summer 

Curriculums:  

Language of Instruction:  Czech 

Public info:  http://www.fit.vutbr.cz/study/courses/FLP/public/ 

Private info:  http://www.fit.vutbr.cz/study/courses/FLP/private/ 

Credits:  5 

Completion:  credit+exam (written) 

Type of instruction:  Hour/sem  Lectures  Seminar Exercises  Laboratory Exercises  Computer Exercises  Other 

Hours:  26  0  0  12  14 

 Exams  Tests  Exercises  Laboratories  Other 

Points:  60  20  0  0  20 



Guarantor:  Kolář Dušan, doc. Dr. Ing. (DIFS) 

Lecturer:  Kolář Dušan, doc. Dr. Ing. (DIFS) 
Instructor:  Škarvada Libor, RNDr. (DIFS) Zobal Lukáš, Ing. (DIFS) 

Faculty:  Faculty of Information Technology BUT 

Department:  Department of Information Systems FIT BUT 

Substitute for:  

 Learning objectives: 

  Obtaining a basic knowledge and practical experience in functional and logic programming. Introduction into formal concepts used as a theoretical basis for both paradigms.
 Description: 

  Practical applications and broader introduction into lambda calculus and predicate logic within the context of functional and logic programming languages. Within functional programming, abstract data types are discussed, as well as the use of recursion and induction, manipulation of lists and infinite data structures in language Haskell. Experience in logic programming is gained in programming languages Prolog (cut operator, state space search, database modification), CLP, and Goedel. Moreover, principles of their implementation are mentioned too.  Knowledge and skills required for the course: 

  Processing (analysis, evaluation/interpretation/compilation) of programming languages, predicate logic.
 Subject specific learning outcomes and competencies: 

  Students will get basic knowledge and practical experience in functional and logic programming (two important representatives of declarative programming). Moreover, they will get basic information about theoretical basis of both paradigms and implementation techniques.  Generic learning outcomes and competencies: 

  Use and understanding of recursion for expression of algorithms.
 Syllabus of lectures: 


 Introduction to functional programming
 Lambda calculus
 Programming language Haskell, introduction, lists
 Userdefined data types, type classes, and arrays in Haskell
 Input/Output in Haskell  type classes IO and Monad
 Proofs in functional programming
 Denotational semantics, implementation of functional languages
 Introduction to logic programming, Prolog
 Lists, cut operator, and sorting in Prolog
 Data structures, text strings, operators  extensions of SWI Prolog
 Searching state space, clause management, and parsing in Prolog
 Goedel  logic programming language not using Horn clauses
 Implementation of logic languages, CLP, conclusion
 Syllabus of computer exercises: 

  Haskell  basic language features, recursion, lists, partial application, higherorder functions (map, filter, foldX), infinite lists, partial evaluation
 Haskell  data types, monads, I/O
 Haskell  demonstration  construction of a simple interpreter using library Parsec
 Prolog  program structure, recursion, lists
 Prolog  dynamic predicates, advanced example on dynamic predicates
 Prolog  more advanced examples, tests on variable instantiation, state space search
 Syllabus  others, projects and individual work of students: 


 A simple program in Haskell programming language (Hugs, GHC, GHCi).
 A simple program in Prolog/Gödel/CLP(R) (SWIPL, Gödel, CiaoProlog).
 Fundamental literature: 


 Thompson, S.: Haskell, The Craft of Functional Programming, ADDISONWESLEY, 1999, ISBN 0201342758
 Nilsson, U., Maluszynski, J.: Logic, Programming and Prolog (2ed), John Wiley & Sons Ltd., 1995
 Hill, P., Lloyd, J.: The Gödel Programming Language, MIT Press, 1994, ISBN 0262082292
 Jones, S.P.: Haskell 98 Language and Libraries, Cambridge University Press, 2003, p. 272, ISBN 0521826144
 Study literature: 


 Thompson, S.: Haskell, The Craft of Functional Programming, ADDISONWESLEY, 1999, ISBN 0201342758
 Nilsson, U., Maluszynski, J.: Logic, Programming and Prolog (2ed), John Wiley & Sons Ltd., 1995
 Hill, P., Lloyd, J.: The Gödel Programming Language, MIT Press, 1994, ISBN 0262082292
 Controlled instruction: 

 
 Midterm exam  written form, questions and exercises to be answered and solved, no possibility to have a second/alternative trial  20 points.
 Projects realization  2 projects, implementation of a simple program according to the given specification  one in a functional programming language the other in a logic programming language  20 points all projects together.
 Final exam  written form, questions and exercises to be answered and solved, 2 another corrections trials possible (60 points  the minimal number of points which can be obtained from the final exam is 25, otherwise, no points will be assigned to a student).
 Progress assessment: 

 
 Midterm exam, for which there is only one schedule and, thus, there is no possibility to have another trial.
 Two projects should be solved and delivered in a given date during a term.
 Exam prerequisites: 

  At the end of a term, a student should have at least 50% of points that he or she could obtain during the term; that means at least 20 points out of 40. Plagiarism and not allowed cooperation will cause that involved students
are not classified and disciplinary action can be initiated.  
