1 / 43

Modellierung und Programmierung 1

Modellierung und Programmierung 1 . Theoretische Grundlagen der funktionalen ProgrammierungOperationale Semantik des ?-Kalkls (Fortsetzung der letzten VO)Einfhrung in die funktionale Programmierung mit HaskellBestandteile von Haskell-ProgrammenArbeitsumgebung, Haskell-SystemeDatentypen in Ha

ranger
Download Presentation

Modellierung und Programmierung 1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


    1. 15.04.2012 Modellierung und Programmierung 1 Professur für Angewandte Telematik / e-Business Institut für Informatik Universität Leipzig Stiftungsprofessur der DTAG info@ebus.informatik.uni-leipzig.de www.lpz-ebusiness.de +49 (341) 97 323 30

    2. Modellierung und Programmierung 1 Theoretische Grundlagen der funktionalen Programmierung Operationale Semantik des ?-Kalküls (Fortsetzung der letzten VO) Einführung in die funktionale Programmierung mit Haskell Bestandteile von Haskell-Programmen Arbeitsumgebung, Haskell-Systeme Datentypen in Haskell Funktionen in Haskell Professur für Angewandte Telematik/e-Business Inhalt der heutigen Vorlesung 2

    3. Theoretische Grundlagen der funktionalen Programmierung: Das ?-Kalkül

    4. Operationale Semantik des ?-Kalküls Die Bedeutung einer ?-Abstraktion ändert sich nicht, wenn wir ihre formalen Parameter konsistent umbenennen, d.h. alle gebundenen Vorkommen des Parameters ebenfalls umbenennen: (?x. × x 2) ? a-Konversion ? (?y. × y 2) formal ?x.e ? a-Konversion ? ?y.e[y/x] wenn y nicht frei in e ist a-Konversion ist manchmal unerlässlich, um Namenskollisionen und somit fehlerhafte Reduktionen zu vermeiden. 4 Professur für Angewandte Telematik/e-Business a-Konversion

    5. Operationale Semantik des ?-Kalküls 5 Professur für Angewandte Telematik/e-Business a-Konversion. Beispiel

    6. Operationale Semantik des ?-Kalküls Der Kern des ?-Kalküls bietet keine Konstanten (wie 1, “Hallo", True) oder vorde?nierte Funktionen (wie +, *). d-Reduktion eine Reduktion einiger vorde?nierter Funktionen (+ x y) ? x _+_ y (* x y) ? x _*_ y (and False e) ? False (and True e) ? e etc. Operationen wie _+_ sind direkt auf der Zielmaschine ausführbar. 6 Professur für Angewandte Telematik/e-Business d-Reduktion

    7. ?-Kalkül ? Haskell Das ?-Kalkül mit der operationalen Semantik (a-Konversion, ß-Reduktion und d-Reduktion) ist ausreichend, um als Zielsprache für alle funktionalen Programmiersprachen zu dienen. Haskell ist ein syntaktisch angereichertes ?-Kalkül. 7 Professur für Angewandte Telematik/e-Business

    8. Einführung in die funktionale Programmierung mit Haskell

    9. Motivation „The clarity and economy of expression that the language of functional programming permits is often very impressive, and, but for human inertia, functional programming can be expected to have a brilliant future, the more so because today's computers admit quite efficient implementations of functional programming languages.“ Eine Prognose von Dijkstra 9 Professur für Angewandte Telematik/e-Business

    10. Übersetzungsschema funktionaler Sprachen Programme in funktionalen Sprachen werden als Terme aufgefasst. Sie können durch einen Interpreter ausgeführt werden. Vor der Interpretation werden sie einer Vorverarbeitung oder Übersetzung unterworfen, die sie in eine für die Interpretation geeignete interne Darstellung überführt und zugleich wichtige Konsistenzeigenschaften (u.a. Typkonsistenz) des Programms feststellt. 10 Professur für Angewandte Telematik/e-Business

    11. Statische und dynamische Programm-eigenschaften Unterscheidung von statischen und dynamischen Eigenschaften eines Programms: statisch: Eigenschaften, die in der Vorverarbeitung ohne Ausführung des Programms festgestellt werden. Bei funktionalen Sprachen: Typkonsistenz. dynamisch: Alle Eigenschaften, die erst bei Vorliegen eines aktuellen Ausdrucks als Eingabe festgestellt werden, etwa das Terminieren einer Programmausführung. 11 Professur für Angewandte Telematik/e-Business

    12. Übersetzungsschema funktionaler Sprachen 12 Professur für Angewandte Telematik/e-Business Verknüpfung zum ?-Kalkül

    13. Übersetzungsschema von Haskell-Programmen 13 Professur für Angewandte Telematik/e-Business

    14. Haskell Systeme Hugs = Haskell User’s Gofer System; Gofer = Good for equational reasoning Die am weitesten verbreitete Haskell-Implementierung Gut geeignet für Lehre und Prototyp-Entwicklung Verfügbar unter: www.haskell.org./hugs Start in der Kommandozeile mit hugs 14 Professur für Angewandte Telematik/e-Business Der Hugs-Interpreter

    15. Haskell Systeme Der am weitesten verbreitete Compiler. Sehr umfangreiches System, viele Erweiterungen. Besitzt auch Interpreter-Frontend. Weitgehend Hugs-kompatibel. Verfügbar im Web unter: www.haskell.org./ghc/ Start in der Kommandozeile mit ghci 15 Professur für Angewandte Telematik/e-Business Der Glasgow-Haskell Compiler GHC

    16. Auswerten von Ausdrücken in Hugs/GHCI Einen Ausdruck auszuwerten bedeutet, ihn zu einem Wert zu reduzieren. Ein Haskell-Interpreter (hugs/ghci) erwartet als Eingabe einen auszuwertenden Ausdruck. Die Eingabeaufforderung „>“ bedeutet, dass das System dazu bereit ist, Ausdrücke auszuwerten. 16 Professur für Angewandte Telematik/e-Business

    17. Die Standard-Bibliothek „Prelude“ In der Bibliotheksdatei Prelude.hs ist eine große Menge von Standard-Funktionen vorde?niert. Neben den üblichen numerischen Funktionen gehören dazu u.a. auch viele nützliche Funktionen für die Verarbeitung von Listen. > head [1,2,3,4,5] 1 > [1,2,3,4,5] !! 2 3 > length [1,2,3,4,5] 5 > tail [1,2,3,4,5] [2,3,4,5] > sum [1,2,3,4,5] 15 > [1,2,3] ++ [4,5] [1,2,3,4,5] 17

    18. Haskell Skripte Genau wie die Funktionen von „Prelude.hs“ kann man auch eigene, neue Funktionen de?nieren. Neue Haskell-Funktionen werden in einem Skript definiert - eine Textdatei, die eine Folge von Funktionsde?nitionen enthält. Als Konvention verwenden Haskell-Skripte das Suf?x .hs im Dateinamen. Bei der Entwicklung eines Skripts arbeitet man typischerweise mit zwei Fenstern: in einem Fenster wird das Skript mit einem Editor entwickelt, im anderen Fenster läuft der Hugs-Interpreter. 18 Professur für Angewandte Telematik/e-Business

    19. Layout-Regeln für Haskell-Skripte a = b + c where b = 1 c = 2 d = a * 2 19 Professur für Angewandte Telematik/e-Business

    20. Anforderungen an Namen Funktionen und Funktionsargumenten müssen mit einem Kleinbuchstaben beginnen: Schlüsselwörter sind von Haskell reserviert und können nicht als Funktionsnamen bzw. Namen für Funktionsargumente verwendet werden case class data default deriving do else if import in in?x in?xl in?xr instance let module newtype of then type where Kommentare 20 Professur für Angewandte Telematik/e-Business

    21. Fehler 21 Professur für Angewandte Telematik/e-Business Typische Fehlermeldungen in Hugs

    22. Nützliche Hugs-Befehle 22 Professur für Angewandte Telematik/e-Business

    23. Datentypen in Haskell

    24. Datentypen in Haskell Typen sind Mengen von Objekten, die den gleichen Aufbau besitzen. Ein Typ de?niert eine Menge von gleichartigen Objekten (Wertevorrat, „Domain“) und Operationen, die auf diese Objekte anwendbar sind. Beispiel Der Datentyp Bool enthält zwei logische Werte False und True. Der Typ Bool -> Bool beinhaltet alle Funktionen mit Parameter Bool und Ergebnis Bool, z.B. die Negationsfunktion :type not not :: Bool -> Bool Die Notation x :: a (x ist vom Typ a) wird vom Haskell-Compiler eingesetzt, um anzuzeigen, dass das Objekt x den Typ a besitzt. 24 Professur für Angewandte Telematik/e-Business

    25. Typen in Haskell Jeder wohlgeformte Ausdruck in Haskell besitzt einen Typ. Dieser Typ kann in Haskell zur Übersetzungszeit automatisch ausgerechnet werden. Das Verfahren heißt Typinferenz. Typinferenz 25 Professur für Angewandte Telematik/e-Business

    26. Typen in Haskell Haskell-Programme sind typsicher (type safe); es können keine Typfehler zur Zeit der Programmausführung auftreten. Alle Typfehler werden unter Haskell zur Übersetzungszeit gefunden. Dadurch werden Programme sicherer und schneller, da Typchecks zur Laufzeit nicht mehr benötigt werden. Typkorrektheit bedeutet nicht, dass ein Programm überhaupt keine Fehler mehr hat. Typsicherheit 26 Professur für Angewandte Telematik/e-Business

    27. Grundlegende Typen in Haskell Bool - Wahrheitswerte True , False Char - Zeichen 'a', ‘B', ‘7', '_', '\n‘ String - Zeichenketten (Listen von Zeichen) "", "foo“ Int - Ganze Zahlen mit festgelegter Stellenzahl minBound :: Int -2147483648 maxBound :: Int 2147483647 Integer - Ganze Zahlen mit beliebiger Genauigkeit Float - Gleitkommazahlen (einfache Genauigkeit) 27 Professur für Angewandte Telematik/e-Business

    28. Listentypen Eine Liste ist eine Folge von Werten des selben Typs: [ False , True , False ] :: [ Bool ] [ ’a’, ’b’, ’c’, ’d’ ] :: [ Char ] Listenlänge (length) = die Anzahl der Elemente in einer Liste. length [] -- leere Liste 0 length [ False , True ] 2 Der Typ einer Liste sagt nichts über deren Länge aus: [ False , True ] :: [ Bool ] [ False , True , False ] :: [ Bool ] Die Elemente einer Liste können von beliebigem Typ sein. Zum Beispiel sind auch Listen von Listen möglich: [ [ ’a’ ], [ ’b’, ’c’ ] ] :: [ [ Char ] ] 28 Professur für Angewandte Telematik/e-Business

    29. Listentypen Leere Liste: [ ] Anhängen eines Elements vor einer Liste: Operator „:“ Verkettung von Listen: Operator „++“ Konstruieren von Listen 29 Professur für Angewandte Telematik/e-Business

    30. Listentypen Es gibt mehrere Möglichkeiten, Listen auf komprimierte Weise zu beschreiben: Für Elementtypen, die Aufzählungstypen sind: [n..m] bedeutet eine Liste [n,n+1,...,m] z.B.: [1..5] bedeutet [1,2,3,4,5] Listenkomprehensionen Konstruktion neuer Listen aus bereits vorhandenen Listen. Konstruieren von Listen 30 Professur für Angewandte Telematik/e-Business

    31. Listentypen Eine Mengenkomprehension erlaubt es, neue Mengen aus bereits gegebenen Mengen zu konstruieren. 31 Professur für Angewandte Telematik/e-Business Eine Listenkomprehensionen erlaubt es, neue Listen aus bereits vorhandenen Listen zu konstruieren.

    32. Listentypen Ein Generator beschreibt, wie nacheinander die Werte für eine Laufvariable - hier x - erzeugt werden. Für alle vom Generator gelieferten Laufvariablenwerte wird das Ergebnis des Resultatausdrucks in der neuen Liste gesammelt. Eine Listenkomprehension kann mehrere mit Kommas getrennte Generatoren besitzen: Listenkomprehensionen: Bestandteile 32 Professur für Angewandte Telematik/e-Business

    33. Listentypen Beispiel einer Listenkomprehension 33 Professur für Angewandte Telematik/e-Business

    34. Listentypen Listenkomprehension ist oft eine geeignete Technik, um Funktionen zu definieren. Beispiele Listenkomprehensionen in Funktionen 34 Professur für Angewandte Telematik/e-Business

    35. Tupel-Typen Ein Tupel ist eine Folge von Werten mit (möglicherweise) unterschiedlichen Typen: (False , True ) :: (Bool , Bool ) (False , ’a’, True ) :: (Bool , Char , Bool ) Der Typ eines Tupels legt fest, wie viele Komponenten es besitzt: (False,True) :: (Bool,Bool) (False,True,False) :: (Bool,Bool,Bool) Die Komponenten eines Tupels können alle beliebige unterschiedliche Typen besitzen: ('a',(False, ‘b')) :: (Char,(Bool,Char)) (True,['a', 'b']) :: (Bool,[Char]) 35 Professur für Angewandte Telematik/e-Business

    36. Listentypen vs. Tupel-Typen [ T ] ist der Typ von Listen, die Elemente des Typs T enthalten. 36 Professur für Angewandte Telematik/e-Business (T1 , T2 , . . . , Tn ) ist der Typ eines Tupels, dessen i-te Komponente den Typ Ti besitzt. Der Typ einer Liste sagt nichts über die Anzahl der Elemente aus. Der Typ eines Tupels legt die Anzahl der Elemente fest.

    37. Funktionen in Haskell

    38. Beispiel: Sieb des Eratosthenes 1. Nimm die aktuelle Liste aller Zahlen. [ 2 3 4 5 6 7 8 9 10 11 12 13 14 15 · · ·] Die erste Zahl in dieser Liste ist eine Primzahl. Markiere alle Vielfache dieser Zahl 2 [ 3 4 5 6 7 8 9 10 11 12 13 14 15 · · ·] und entferne sie aus der Liste 2 [ 3 5 7 9 11 13 15 · · ·] weiter mit 1 1. Idee 38 Professur für Angewandte Telematik/e-Business

    39. Beispiel: Sieb des Eratosthenes 1. Nimm die aktuelle Liste aller Zahlen. 2 [ 3 5 7 9 11 13 15 · · ·] Die erste Zahl in dieser Liste ist eine Primzahl. Markiere alle Vielfache dieser Zahl 2 3 [ 5 7 9 11 13 15 · · ·] und entferne sie aus der Liste 2 3 [ 5 7 11 13 · · ·] weiter mit 1 1. Idee 39 Professur für Angewandte Telematik/e-Business

    40. Beispiel: Sieb des Eratosthenes Wie sieht die Liste aller Primzahlen aus? 2. Suche nach einer Abstraktion 40 Professur für Angewandte Telematik/e-Business

    41. Beispiel: Sieb des Eratosthenes 2. Suche nach einer Abstraktion 41 Professur für Angewandte Telematik/e-Business

    42. Beispiel: Sieb des Eratosthenes 3. Anwenden der Abstraktion für die Lösung 42 Professur für Angewandte Telematik/e-Business

    43. Beispiel: Sieb des Eratosthenes Folgende Haskell-Funktionen werden im Texteditor definiert: Die Funktion sieve sucht Primzahlen nach dem Eratosthenes-Algorithmus. Die Funktion primes ruft die bereits bekannte Funktion sieve auf. 4. Implementierung der Lösung 43 Professur für Angewandte Telematik/e-Business

    44. Beispiel: Sieb des Eratosthenes Die Lösung kann durch einen Interpreter in der Konsole ausgeführt werden. Bevor die bereits definierte Funktion primes gestartet werden kann, soll das entsprechende Skript geladen werden. 5. Anwendung der Lösung 44 Professur für Angewandte Telematik/e-Business

More Related