Title:

# Functional and Logic Programming

Code:FLP
Ac.Year:2015/2016
Sem:Summer
Curriculums:
ProgrammeField/
Specialization
YearDuty
IT-MSC-2MBI-Elective
IT-MSC-2MBS1stCompulsory
IT-MSC-2MGM-Compulsory-Elective - group I
IT-MSC-2MIN1stCompulsory
IT-MSC-2MIS1stCompulsory
IT-MSC-2MMI1stCompulsory
IT-MSC-2MMM-Compulsory
IT-MSC-2MPV-Compulsory-Elective - group M
IT-MSC-2MSK-Elective
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/semLecturesSeminar
Exercises
Laboratory
Exercises
Computer
Exercises
Other
Hours:26001214
ExamsTestsExercisesLaboratoriesOther
Points:60200020
Guarantor:Kolář Dušan, doc. Dr. Ing. (DIFS)
Lecturer:Kolář Dušan, doc. Dr. Ing. (DIFS)
Instructor:Hyrš Martin, Ing. (DCSY)
Matula Peter, Ing. (DIFS)
Faculty:Faculty of Information Technology BUT
Department:Department of Information Systems FIT BUT
Substitute for:
 Functional and Logic Programming (FLP), DIFS

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:

1. Introduction to functional programming
2. Lambda calculus
3. Programming language Haskell, introduction, lists
4. User-defined data types, type classes, and arrays in Haskell
6. Proofs in functional programming
7. Denotational semantics, implementation of functional languages
8. Introduction to logic programming, Prolog
9. Lists, cut operator, and sorting in Prolog
10. Data structures, text strings, operators - extensions of SWI Prolog
11. Searching state space, clause management, and parsing in Prolog
12. Goedel - logic programming language not using Horn clauses
13. Implementation of logic languages, CLP, conclusion
Syllabus of computer exercises:

1. Haskell - basic language features, recursion, lists, partial application, higher-order functions (map, filter, foldX), infinite lists, partial evaluation
3. Haskell - demonstration - construction of a simple interpreter using library Parsec
4. Prolog - program structure, recursion, lists
5. Prolog - dynamic predicates, advanced example on dynamic predicates
6. Prolog - more advanced examples, tests on variable instantiation, state space search
Syllabus - others, projects and individual work of students:

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

• Thompson, S.: Haskell, The Craft of Functional Programming, ADDISON-WESLEY, 1999, ISBN 0-201-34275-8
• 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 0-262-08229-2
• 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, ADDISON-WESLEY, 1999, ISBN 0-201-34275-8
• 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 0-262-08229-2
Controlled instruction:

• Mid-term 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). The exam has one regular and two corrective periods. Regular period is always performed in fully written way only.  Corrective periods can be performed either in fully written form or in a combined form (both written and verbal performance in a single day, written part first then verbal immediately). The form of corrective periods is announced as soon as the previous period is evaluated, while the combined form will be performed in the case when for the particular period is assigned no more than 16 students.
Progress assessment:

• Mid-term 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.