Institute of Software Engineering and Compiler Construction
- 1:
Teaching.- 1.1:
Summer term 2012. - 1.2:
Winter term 2011/2012.- 1.2.1:
Constraint programming. - 1.2.2:
Embedded softwareengineering for automotive systems. - 1.2.3:
Functional programming. - 1.2.4:
Foundations of compiler construction. - 1.2.5:
Management of Sotware Projects. - 1.2.6:
Software engineering I. - 1.2.7:
Algebraic structures in computer science. - 1.2.8:
Formal specification languages and their semantics. - 1.2.9:
Techniques of formal program development. - 1.2.10:
Advanced techniques for typical applications in computer science. - 1.2.11:
Logic-based programming languages. - 1.2.12:
Constraint-Programming Practice. - 1.2.13:
Software Construction. - 1.2.14:
Experimental software engineering. - 1.2.15:
Functional programming.
- 1.2.1:
- 1.3:
Regularly offered courses. - 1.4:
Former courses. - 1.5:
Topics for diploma theses, Master's theses and practical work.
- 1.1:
- 2:
Research. - 3:
Staff. - 4:
Contact.
Functional Programming
The next exam will take place on 24.04.2012. To discuss the procedure please contact
Walter Guttmann in due time.
Lectures take place each Wednesday starting at 14:15 in O25-H6, the exercise courses thereafter in O27-133.
The exercises, necessary materials and solution proposals are available in
this directory. Solutions are discussed at the beginning of the subsequent lecture and published afterwards.
Contents
Concepts of functional programming languages are increasingly introduced to imperative languages, for example, generics in C++, Java and C# or higher order functions in C++ and C#. But what is behind these concepts and what benefits do they offer in a declarative environment? To this end we study the purely functional programming language Haskell. Its programs are expressions whose values do not depend on the time of evaluation. There are no assignments, no states, no side effects and no modifiable variables. Higher order functions and lazy evaluation are instead used to modularise programs in new ways, making them more concise and comprehensible. Moreover, programs can be calculated with, for example, to prove their correctness and to derive optimised versions.
This lecture is an introduction to functional programming. We discuss basic concepts and topics such as algebraic data types, function definitions by patterns, list comprehensions, parametric type polymorphism, higher order functions, algorithm schemes, lazy evaluation, infinite data structures, type classes and monads. They are applied to problems from areas such as algorithms, program transformation and compiler construction. Haskell is used to communicate the skills, but they are profitably used to program in a functional style in other programming languages, too.
Bibliography
- Richard Bird, Introduction to Functional Programming using Haskell, Prentice Hall, second edition, 1998.
- Paul Hudak, The Haskell School of Expression: Learning Functional Programming through Multimedia, Cambridge University Press, 2000.
- Graham Hutton, Programming in Haskell, Cambridge University Press, 2007.
- Bryan O'Sullivan, Don Stewart, John Goerzen,
Real World Haskell, O'Reilly, 2008. - Simon Thompson, Haskell: The Craft of Functional Programming, Addison Wesley, third edition, 2011.
- Miran Lipovača,
Learn You a Haskell for Great Good!, no starch press, 2011.
