Diese Übung dient der Zusammenarbeit und ist als Forschungslabor vorgesehen. Wir werden uns im April bis Juli zum regelmäßigen Austausch online treffen.

Programmierungskenntnisse und Erfahrung in Entwicklungsprojekten (im Kontext des Studiums oder in anderem Rahmen) sind notwendige Vorkenntnisse. Die Arbeitsweise der Übung fokussiert Ihre individuelle Entwicklung von Software in einer oder mehreren funktionalen Sprachen: Wir diskutieren praktische Beispiele, sowie Methoden und versuchen die entsprechenden Diskussionen mit Prinzipien und Theorie zu verbinden, die in Literatur und Onlinepräsentationen zugänglich sind.

Ziel ist es, dass Jede/r Studierende im Rahmen dieser Veranstaltung Kenntnis von einer ausgewählten funktionalen Programmierungssprache gewinnen wird.

Termine


Literatur

Unser Hauptbuch für diese Übung ist:

Abelson, H. and Sussman, G.J. (1996). Structure and interpretation of computer programs.Cambridge, Mass.: MIT Press.

Eine digitale Version liegt in Ilias vor. Es gibt auch eine deutsche Übersetzung, die Sie (hoffe ich) später des Semesters in der UB finden können:

Abelson, H. und Sussman, G.J. (1996). Struktur und Interpretation von Computerprogrammen : eine Informatik-Einführung. 4., durchges. Aufl. Berlin: Springer

Das erste Kapitel wird die UB für Ilias einscannen.

Sie sollen unbedingt Kapitel 1 von Abelson und Sussman lesen. Ich empfehle Ihnen, auch 2–4 durchzulesen. Wenn einige mathematische Beispiele schwierig sind, können Sie diese überspringen. Diese aufgezeichnete Vorlesungsreihe bei Abelson und Sussman erklärt funktionale Programmierung und Informatik allgemein mit viel spaß und tiefe: https://www.youtube.com/playlist?list=PLE18841CABEA24090

Wichtig sind einige Paar Grundbegriffe für ein tieferes theoretisches und praktisches Verständnis von Programmierung allgemein und funktionale Programmierung, insbesondere:

  • Abstraktionen
  • Algorithmen
  • Prozeduren höherer Ordnung
  • Rekursion
  • Modularität
  • Umgebungen

Wir werden im Rahmen Ihrer praktischen Arbeit diese Begriffe diskutieren. Insbesondere werden wir die Unterschiede zwischen nicht-mutierbaren (mathematischen) Variabeln und mutierbare Variabeln, wie wir sie von prozeduralen Programmiersprachen kennen, erläutern. LISP und Scheme (der LISP-Dialekt, der in Abelson und Sussman verwendet wird) stellt mutierbare Variabeln zur Verfügung. In z.B. Haskell gibt es keine solche Variablen.

Lambda Papers

Diese sind wichtig für ein tieferes Verständnis der Grundkonzepte und ihrem historischen Hintergrund: https://en.wikisource.org/wiki/Lambda_Papers

Ressourcen

Hier finden Sie weitere Informationen über einige (nicht ganz zufällich) ausgewählte funktionale Programmierungssprache:

Common LISP

Common-Lisp.net.

Gnu CLISP.

Fundamentals of CLOS. Common Lisp Object System stellt Objektorientierung zur verfügung in LISP. Es gibt Mehrfachvererbung :-)

Für FormalistInnen: The Common Lisp HyperSpec. Einkaufsmöglichkeiten des offiziellen Standards finden Sie bei ANSI.

Scheme

Eine wichtige Lernressource für Scheme ist Abelson und Sussman: Struktur und Interpretation von Computerprogrammen.

The Scheme programming language.

Definierende Beschreibung: Revised5 Report on the Algorithmic Language Scheme in Higher-Order and Symbolic Computation 11, 7–105(1998).

Haskell

The Haskell language.

Simon Peyton-Jones: Escape from the ivory tower: the Haskell journey ist ein gutes Einleitungsvideo mit vielen historischen Anekdoten.

The Haskell Tool Stack.

Tutorials: Programming Haskell.

XSLT

What is XSLT?

SAXON: The XSLT and XQuery Processor.

XSLT im Rahmen Text Encoding Initative (TEI): Teil 1 (Teil 2–5 folgt). Es gibt eine Uni Köln Site-Lizenz für Oxygen, die sich für die XSLT-Entwicklung verwenden lässt Treten Sie bitte bei Bedarf mit mir in Kontakt.

W3C Standarddokumente.

XSLT ist normalerweise als eine Sprache an funkationale Programmierung-Ideen basiert, aber nicht völlig funktional. Argumente dagegen gibt, z.B.: The Functional Programming Language XSLT - A proof through examples.

Ein Paar weitere Sprache

  • Kotlin
  • Elm
  • Clojure
  • Erlang
  • Dart
  • funktionales JavaScript
  • Java 8

Studienleistung

  • Aktive Teilnahme in Diskussionen
  • Umsetzung von mindestens zwei kleinerer Entwicklungsprojekte
    • diese Projekte können miteinander verbunden sein

Modulprüfung

Wenn Sie ein Modulprüfung auf Grundlage dieser Übung absolvieren möchten, dann kontaktieren Sie mich bitte bis 18. Juni. Danach melden Sie sich bitte zu der Prüfung in Klips an.