Functional programming: the function concept, higher order functions, currying, evaluation strategies, streams, pattern matching, overloading, polymorphism, interpretation, lazy evaluation, types and classes.
Formal languages and syntax analysis: automata, regular expressions, grammars, lexical analysis, recursive descent, classes of languages
Internet programming.
Language translation: interpretation, compilation and linking.
After passing the course, the student should be able to:
- apply and explain general concepts in programming, in particular flow of control, recursion, interpretation, paradigms and models of computation
- apply and explain basic concepts in functional programming particularly clean functions, referential transparency, higher order functions, immutability, data types
- apply and explain basic concepts in formal languages and syntax analysis, in particular automata, regular expression, grammars, lexical analysis and recursive descent
- write own client-server programs as well as use protocols and be able to explain how they are interpreted and written
in order to
- obtain a broader perspective on programming
- be able to assess which paradigm and which programming language that is appropriate to solve a certain assignment
- be able to use adequate programming style in a chosen programming paradigm
- be able to participate in discussions about programming paradigms, history of programming languages, language definition, properties of type systems, principles of language design, language translation, programming principles and programming concepts actively