Functional programming: concept of function, higher-order functions, currying, strategies of evaluation, streams, pattern matching, overloading, polymorphism, interpreting, types and classes.
Logic programming: unification, backtracking, negation and cuts as well as non-deterministic programming and block diagram.
Formal languages and syntax analysis: automata, regular expressions, grammars, lexical analysis, recursive descent, language classes.
Internet programming.
Language Translation: interpreting, compilation and linking.
After the course the student should be able to
- apply and explain common concepts in programming: recursion, control flow, interpreting, paradigms
- apply and explain basic concepts of functional programming: higher-order functions, currying, lazy evaluation, pattern matching, types and classes
- apply and explain basic concepts of logic programming: unification, backtracking, cuts, negation and different programming techniques such as generate-test
- apply and explain basic concepts in formal languages and syntax analysis: automata, regular expressions, grammars, lexical analysis, and recursive descent
- write their own client-server and use protocols and explain how they are interpreted and written
in order to
- get a broader perspective on programming,
- judge which paradigm and which programming language that is appropriate for solving a specific task,
- use the appropriate style of programming in the selected programming paradigm,
- actively participate in discussions about programming paradigms, programming language history, language definition, properties of type systems, principles of language design, language translation, programming principles and programming concepts.