Zusammenfassung Rückblick Befragung Ausblick Zusammenfassung Rückblick Befragung Ausblick Rückblick und Ausblick Funktionales Programmieren 1 Zusammenfassung Organisatorisches 2 Rückblick 3 Befragung 4 Ausblick Rückblick und Ausblick Organisatorisches ( 4. Februar 2008) Berthold Hoffmann Studiengang Informatik Universität Bremen Wintersemester 2007/2008 (Vorlesung am 4. Februar 2008) Berthold Hoffmann Zusammenfassung Rückblick Befragung Ausblick Berthold Hoffmann Funktionales Programmieren Organisatorisches Scheine Zusammenfassung Rückblick Befragung Ausblick Funktionales Programmieren Organisatorisches Fachgespräch Ziel: Individualität der Leistung sicherstellen Also: Beteiligung an der Bearbeitung der Übungsaufgaben Idealfall: Note wird bestätigt Schein ausfüllen (siehe WWW: PI3 → “Scheine”) Entweder beim Tutor oder mir abgeben Oder zum Fachgespräch mitbringen Scheine gehen zur DPA-Geschäftsstelle Das kann bis Ende Februar dauern Berthold Hoffmann Zusammenfassung Rückblick Befragung Ausblick Funktionales Programmieren Logisch Funktional Rückblick und Ausblick ( 4. Februar 2008) 1 Zusammenfassung 2 Rückblick Logik-Programmieren Funktionales Programmieren 3 Befragung 4 Ausblick Berthold Hoffmann Zusammenfassung Rückblick Befragung Ausblick Funktionales Programmieren Logisch Funktional Logik-Programmieren nach Prolog Mercury U. Melbourne Typisierung Modes (in- und out-Parameter Curry CAU Kiel polymorphe Typisierung Funktionen höherer Ordnung Oz / Mozart DFKI Saarbrücken polymorphe Typisierung, Funktionen constraints, Vererbung Nebenläufigkeit eigentlich alle Programmierstile Berthold Hoffmann Funktionales Programmieren Organisation Anmeldung im WWW (PI3 → “Fachgespräche”) Freitag, den 15. bzw. Montag, den 18. bzw. Mittwoch den 19. Februar Dauer: 10-15 min. Thema: 2 Aufgaben (eine wählen Sie aus) Wichtig: abgegebene Übungsblätter mitbringen Berthold Hoffmann Zusammenfassung Rückblick Befragung Ausblick Funktionales Programmieren Logisch Funktional Logik-Programmieren Einsatzfelder wissensbasierte Systeme, künstliche Intelligenz Analyse natürlicher Sprachen Vorteile sehr einfach backtracking Meta-Programmieren Berthold Hoffmann Zusammenfassung Rückblick Befragung Ausblick Nachteile keine Typisierung keine Funktionen (deterministische Berechnungen) ineffizient Funktionales Programmieren Logisch Funktional Kern des funktionalen Programmierens Definition von Funktionen durch Gleichungen Auswertung durch Reduktion von Ausdrücken Typisierung und Polymorphie Funktionen höherer Ordnung Algebraische Datentypen Beweise durch strukturelle und Fixpunktinduktion Fortgeschrittene Features: Modellierung von Zuständen mit Monaden (z.B. IO) überladene Funktionen (Typklassen) Unendliche Datenstrukturen und verzögerte Auswertung Berthold Hoffmann Funktionales Programmieren Zusammenfassung Rückblick Befragung Ausblick Logisch Funktional Entlegenere Konzepte von Haskell Felder (array) siehe Kapitel “Effizienz” Strukturen (Tupel mit benannten Features, record) Nebenläufigkeit (concurrent Haskell) Threads in Haskell: forkIO :: IO () -> IO ThreadID killThread :: ThreadID -> IO () Zusätzliche Primitive zur Synchronisation Erleichtert Programmierung reaktiver Systeme Schnittstelle zu C Berthold Hoffmann Zusammenfassung Rückblick Befragung Ausblick Funktionales Programmieren Logisch Funktional Bewertung von Haskell Zusammenfassung Rückblick Befragung Ausblick Logisch Funktional Grafische Benutzungsschnittstellen für Haskell HTk Verkapselung von Tcl/Tk in Haskell Nebenläufig mit Events Entwickelt an der AG BKB (Dissertation E. Karlsen) Mächtig, abstrakte Schnittstelle, mittelprächtige Grafik GTk+HS Verkapselung von GTk+ in Haskell Zustandsbasiert mit call-backs Entwickelt an der UNSW (M. Chakravarty) Neueres Toolkit, ästethischer, nicht ganz so mächtig Berthold Hoffmann Zusammenfassung Rückblick Befragung Ausblick Funktionales Programmieren Logisch Funktional Andere funktionale Sprachen Lisp (Common Lisp, Scheme) Stärken Abstraktion durch Polymorphie und Typsystem algebraische Datentypen Funktionen höherer Ordnung Schwächen Komplexität Dokumentation Noch viel im Fluß Berthold Hoffmann Ml (Edinburgh, Caml, O’Caml) Polymorphie, Module, kontrollierte Seiteneffekte Miranda (Kent, Turner) Mutter von Haskell Clean (RU Nijmegen) Stiefschwester von Haskell effiziente Implementierung grafische Benutzungsschnittstelle Flexible Syntax Ausgereifter Compiler Bibliothek Zusammenfassung Rückblick Befragung Ausblick dynamische Typisierung, Seiteneffekte Funktionales Programmieren Logisch Funktional Einsatzfelder funktionaler Sprachen Berthold Hoffmann Zusammenfassung Rückblick Befragung Ausblick Funktionales Programmieren Logisch Funktional Wozu deklaratives Programmieren lernen? Common Lisp künstliche Intelligenz (fragt Diedrich Wolter) Erlang (Firma Ericsson) Telekommunikation Ml Theorembeweiser Haskell Casl-Entwicklungsumgebung Berthold Hoffmann Zusammenfassung Rückblick Befragung Ausblick Rückblick und Ausblick 1 Zusammenfassung 2 Rückblick 3 Befragung Evaluation 4 Ausblick Berthold Hoffmann Funktionales Programmieren Evaluation Berthold Hoffmann Zusammenfassung Rückblick Befragung Ausblick ( 4. Februar 2008) Funktionales Programmieren Evaluation “verzögerte” Auswertung der Fragebögen Befragung am 11., 12. und 18. Dezember 2007 Auswertung (manuell) am 25. Januar 2008 (!) 56 Bögen von ca. 90 Studierenden 36 “freie Angaben” Vollständige Auswertung unter PI3 → “Auswertung der Befragung . . . ” Funktionales Programmieren Berthold Hoffmann Funktionales Programmieren Zusammenfassung Rückblick Befragung Ausblick Evaluation Auswertung von Fragen 1–12 18 von 56 aus höheren Semestern Kritik am Veranstalter Kein Eingehen auf neuere Entwicklungen (7.) kein Bezug zu Forschungsfragen (12.) Kein Bezug zur Berufspraxis (12.) zu wenig hilfreiche Beratung Zusammenfassung Rückblick Befragung Ausblick Evaluation Auswertung von Fragen 13–28 Selbsteinschätzung der Studierenden nicht besonders gut vorbereitet (13.) Nachbereitung war nicht gut zu bewältigen (14.) mangelnde Beteiligung wegen (17.) hohen Ansprüchen des Lehrenden mangelnder Vorbereitung Aufgaben waren nicht nicht immer verständlich Nachebretung durch andere Lektüre (Welche?) Berthold Hoffmann Zusammenfassung Rückblick Befragung Ausblick Berthold Hoffmann Funktionales Programmieren Evaluation Auswertung der “freien” Fragen Zusammenfassung Rückblick Befragung Ausblick Berthold Hoffmann Geringe Motivation der Studierenden PI3 leidet unter TI2 und Softwareprojekt PI3 ist nicht zu aufwendig, aber abstrakt lieber Prolog als Robotik / Grafik in Haskell ? Berthold Hoffmann Funktionales Programmieren Evaluation Meine Pläne Evaluation Mein persönlicher Eindruck Ich werde nie wieder mit Haskell zu tun haben müssen Andererseits: eine neue Art zu denken Auch wenn man hier über manche Dinge meckert, es ist nun mal Informatik, was soll man dazu sonst sagen? Was kann ich später mit Haskell anfangen? (im Beruf, in der Wissenschaft?) Nicht Java runtermachen Mehr direkte Anwendungen (5) Besser verständliche Formulierung der Aufgaben (10) Der Zeitpunkt der Vorlesung ist ungünstig Zeitmangel im 3. Semester Zusammenfassung Rückblick Befragung Ausblick Funktionales Programmieren Zusammenfassung Rückblick Befragung Ausblick Funktionales Programmieren Werbepause Rückblick und Ausblick Weniger Haskell mehr abstrakte Datentypen mehr Algorithmen und Datenstrukturen ein anderes Skript (mehr Beispiele, Fragen, Beweise) mehr Folien, weniger Tafel Musterlösungen für die Aufgaben Berthold Hoffmann Zusammenfassung Rückblick Befragung Ausblick Zusammenfassung 2 Rückblick 3 Befragung 4 Ausblick Werbepause Berthold Hoffmann Funktionales Programmieren Werbepause Zusammenfassung Rückblick Befragung Ausblick Funktionales Programmieren Werbepause Übersetzer Programmiersprachen Lehrveranstaltung im Sommer 2008 (Typ A = “Aufbau”) Angeboten von Berthold Hoffmann Inhalt: Prinzipien von Programmiersprachen Konzepte: Werte, Befehle, Prozeduren, Typen, Module ... Stile: imperativ, objektorientiert, funktional, logisch Beispiele: Ada, Eiffel . . . Berthold Hoffmann 1 ( 4. Februar 2008) Funktionales Programmieren Lehrveranstaltung im Sommer 2009 (Typ A = “Aufbau”) Angeboten von Berthold Hoffmann Inhalt: Implementierung von Programmiersprachen Lexikalische Analyse: lex Syntaxanalyse: Parser (Generatoren), yacc Kontextanalyse: Vereinbarungen und Typen Codeerzeugung und abstrakte Maschinen Berthold Hoffmann Funktionales Programmieren Zusammenfassung Rückblick Befragung Ausblick Werbepause Tschüß Schöne vorlesungsfreie Zeit! Berthold Hoffmann Funktionales Programmieren