Modul


Allgemeine Informationen
Grundlagen funktionaler Programmierung
Introduction to functional programming
BI141
GrundlFunktP-01-BA-M
Oenings, Hendrik (hendrik.oenings@haw-kiel.de)
Angres, Julius (julius.angres@haw-kiel.de)
Angres, Julius (julius.angres@haw-kiel.de)
Wintersemester 2024/25
1 Semester
In der Regel im Wintersemester
Deutsch
Studiengänge und Art des Moduls (gemäß Prüfungsordnung)
Studiengang Vertiefungsrichtung Schwerpunkt Modulart Fachsemester
B.Eng. - Wing - Wirtschaftsingenieurwesen - Elektrotechnik (PO 2017, V1) Wahlmodul
B.Eng. - E - Elektrotechnik (PO 2023, V4) Wahlmodul
B.Eng. - E - Elektrotechnik (PO 2017, V3) Wahlmodul
B.Eng. - Ming - Medieningenieur/-in (PO 2018, V1 + PO 2021, V2) Wahlmodul
B.Sc. - INF - Informatik (PO 2021,V1) Wahlmodul
B.Sc. - WINF - Wirtschaftsinformatik (6 Sem.) Wahlmodul
B.Sc. - WINF 7 Sem. - Wirtschaftsinformatik (7 Sem.) Wahlmodul
B.Sc. - INI - Informationstechnologie (PO 2017, V1) Wahlmodul
B.Eng. - Wing - Wirtschaftsingenieurwesen - Elektrotechnik (PO 2023, V2) Wahlmodul

Kompetenzen / Lernergebnisse
Kompetenzbereiche: Wissen und Verstehen; Einsatz, Anwendung und Erzeugung von Wissen; Kommunikation und Kooperation; Wissenschaftliches Selbstverständnis/Professionalität.
Die Studierenden
- kennen die Unterschiede zwischen imperativer und deklarativer Programmierung
- kennen die Vorteile deklarativer Programmierung gegenüber imperativer Programmierung
- können grundlegende Programme in einer funktionalen Programmiersprache erstellen
- wissen, wie klassische imperative Programmierkonzepte (Datenstrukturen, Schleifen) in funktionalen bzw. funktionallogischen Programmiersprachen abgebildet werden können
- können Ein- und Ausgabeoperationen umsetzen und verstehen, wie der Verzicht auf Seiteneffekte funktioniert
- verstehen das Konzept der "Lazy Evaluation" und können Algorithmen unter Ausnutzung dieses Konzepts kompakt angeben
- kennen die Grundlagen logischer Programmierung und das Konzept des Nichtdeterminismus in der Programmierung
Die Studierenden
- können in Anwendungen der multiparadigmatischen Programmiersprache Python Elemente der funktionalen Programmierung erkennen und zielgerichtet zur Verbesserung der Codequalität einsetzen
- können Algorithmen unabhängig von der konkreten Implementierung und Auswertung verstehen und beschreiben
Die Studierenden
- lernen, Aufgaben in kleinen Gruppen zu bearbeiten
- können sich über Programme, Konzepte und Lösungen austauschen und diese vor einer Gruppe präsentieren
- können Programme übersichtlich und kompakt darstellen und dokumentieren
Die Studierenden
- können Programmiersprachen mit funktionalen Elementen erlernen und anwenden
- können Programmiersprachen mit logischen Elementen erlernen und anwenden
- sind in der Lage, Aufgabenstellungen sowohl selbstständig als auch im Team umzusetzen
Angaben zum Inhalt
Abgrenzung Programmierparadigmen: deklarativ vs. imperativ; Funktionale Programmierung; Motivation
Vergleich zwischen "strict evaluation" und "lazy evaluation"; Vorteile von "lazy evaluation"
Vergleich zwischen imperativen und funktionalen Umsetzungen bekannter Algorithmen (z.B. Quicksort)

Programmiersprache(n) Haskell / Curry:
- Geschichte, Verbreitung, Compiler/Laufzeitumgebungen (GHC, GHCi)
- Funktionen (Definition, Rekursive Funktionen, Funktionen höherer Ordnung, Lambdaausdrücke, Komposition)
- Datentypen (vordefinierte Typen, Deklaration, Polymorphie, Typklassen)
- Datenstrukturen (Listen, Bäume, unendliche Datenstrukturen)
- Ein-/Ausgabe und Behandlung von Seiteneffekten
- Nichtdeterministische Funktionen
- Logische Constraints

Programmiersprache Python:
- Nutzung der Funktionen map, filter, reduce
- Nutzung von Lambdaausdrücken und Funktionen höherer Ordnung
- Vermeidung von Seiteneffekten, Wiederverwendbarkeit
wird in der Veranstaltung bekanntgegeben
Lehrformen der Lehrveranstaltungen
Lehrform SWS
Übung 2
Lehrvortrag 2
Arbeitsaufwand
4 SWS
5,0 Leistungspunkte
48 Stunden
102 Stunden
Modulprüfung
Prüfungsform Dauer Gewichtung wird angerechnet gem. § 11 Absatz 2 PVO Benotet Anmerkung
Klausur 60 Minuten 100 %
Sonstiges
- Grundlegendes Verständnis imperativer Programmiersprachen
- Grundkenntnisse der informatischen Logik
- Verständnis von Algorithmen und Rekursion
- Verständnis von Datenstrukturen (Bäume, verkettete Listen)
- Grundkenntnisse in der Programmiersprache Python