Funktionale Programmierung. der direkte Weg vom Modell zum Programm



Ähnliche Dokumente
Lösungsmethoden gewöhnlicher Differentialgleichungen (Dgl.)

Funktionale Programmierung mit Haskell

1 Mathematische Grundlagen

Einführung in die Java- Programmierung

Vektoren mit GeoGebra

Anmerkungen zur Übergangsprüfung

Musterlösungen zur Linearen Algebra II Blatt 5

Arbeiten mit UMLed und Delphi

Lineare Gleichungssysteme

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Word 2010 Schnellbausteine

Diana Lange. Generative Gestaltung Operatoren

Grundlagen von Python

Informationsblatt Induktionsbeweis

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Programmierparadigmen. Programmierparadigmen. Imperatives vs. objektorientiertes Programmieren. Programmierparadigmen. Agenda für heute, 4.

Beschreibung des MAP-Tools

7 Rechnen mit Polynomen

Mathematik. UND/ODER Verknüpfung. Ungleichungen. Betrag. Intervall. Umgebung

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Übungsbuch für den Grundkurs mit Tipps und Lösungen: Analysis

Erwin Grüner

Lineare Funktionen. 1 Proportionale Funktionen Definition Eigenschaften Steigungsdreieck 3

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

OECD Programme for International Student Assessment PISA Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

Kreatives Occhi. - V o r s p a n n - Alle Knoten und Knüpfelemente sowie ihre Verwendbarkeit. Die Knoten

DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2)

Festigkeit von FDM-3D-Druckteilen

Die Größe von Flächen vergleichen

Erstellen von x-y-diagrammen in OpenOffice.calc

Zeichen bei Zahlen entschlüsseln

Lernmaterial für die Fernuni Hagen effizient und prüfungsnah

Der Zwei-Quadrate-Satz von Fermat

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Professionelle Seminare im Bereich MS-Office

Typdeklarationen. Es gibt in Haskell bereits primitive Typen:

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

Druckerscriptsprache

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Animationen erstellen

proles-login. Inhalt [Dokument: L / v1.0 vom ]

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

CAD Warehouse- Verbindungen. Plattformspezifische Darstellung

macs Support Ticket System

Mit dem Tool Stundenverwaltung von Hanno Kniebel erhalten Sie die Möglichkeit zur effizienten Verwaltung von Montagezeiten Ihrer Mitarbeiter.

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Computeranwendung und Programmierung (CuP)

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Media Teil III. Begriffe, Definitionen, Übungen

2. Programmierung in C

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Anleitung OpenCms 8 Inhaltstyp Kommentare

Wie kann ich in der Backstage-Ansicht eigene Dokumentationen einbinden?

Fremdsprachen bearbeiten

Übung - Konfigurieren einer Windows 7-Firewall

Einführung in die Programmierung

Formica 2.0: Montageauftrag erfassen: Auftragsgruppe

Einbindung einer ACT!12-16 Datenbank als Datenquelle für den Bulkmailer 2012

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Abi-Retter-Strategien: Texterörterung. Das komplette Material finden Sie hier:

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

Anleitung über den Umgang mit Schildern

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Quickreferenz V1.1. Frank Naumann

Durch einen Doppelklick (linke Maustaste) wird das Programm gestartet und es erscheint folgender Bildschirm.

Softwaretechnologie -Wintersemester 2013/ Dr. Günter Kniesel

Direktes Versenden von Listen, z.b. Die Liste der Personalkosten (zpkost)

Schrittweise Anleitung zur Erstellung einer Angebotseite 1. In Ihrem Dashboard klicken Sie auf Neu anlegen, um eine neue Seite zu erstellen.

a n auf Konvergenz. Berechnen der ersten paar Folgenglieder liefert:

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Hinweise zum Übungsblatt Formatierung von Text:

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

WORKSHOP für das Programm XnView

Auto-Provisionierung tiptel 31x0 mit Yeastar MyPBX

Teaser-Bilder erstellen mit GIMP. Bildbearbeitung mit GIMP 1

Anleitung zum erstellen einer PDF-Datei aus Microsoft Word

Lichtbrechung an Linsen

Programmierkurs Java

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus:

Zur drittletzten Zeile scrollen

Java Kurs für Anfänger Einheit 5 Methoden

FORUM HANDREICHUNG (STAND: AUGUST 2013)

Umfrage. Didaktischer Kommentar. Lernplattform

Anleitung Typo3-Extension - Raumbuchungssystem

Diese Prozesse und noch viele andere Tricks werden in der Digitalfotografie mit Hilfe von Bildbearbeitungsprogrammen, wie z. B. Gimp, bewältigt.

Approximation durch Taylorpolynome

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Handout 6. Entwicklung von Makros

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen

1. Trennlinie mit hr Eine dünne Trennlinie wie die obige in der Regio-Farbe (gelb) kann man recht einfach erstellen. Dafür reicht der Befehl

Lineare Gleichungssysteme I (Matrixgleichungen)

Was ist Sozial-Raum-Orientierung?

Professionelle Seminare im Bereich MS-Office

Mediator 9 - Lernprogramm

Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel

EndTermTest PROGALGO WS1516 A

impact ordering Info Produktkonfigurator


Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Transkript:

1 Funktionale Programmierung der direkte Weg vom Modell zum Programm Peter Padawitz, TU Dortmund 19. Juni 2010

2 Inhalt Modelle Bestandteile eines Modells Konstruktor- versus destruktorbasierte Modelle Links

3 Modelle sind mathematische Strukturen, vor allem mengentheoretische und, darauf aufbauend, algebraische, manchmal auch mit Ordnungsrelationen oder Wahrscheinlichkeitsmaßen versehene.

4 Bestandteile eines Modells primitive Daten (Zahlen, Wahrheitswerte, etc.), das sind Objekte, die im Modell vorkommen, aber dort selbst nicht modelliert werden, eine Trägermenge der Objekte, die das Modell beschreibt, Konstruktoren, das sind Funktionen, mit deren Hilfe die Objekte des Modells induktiv aus primitiven Daten zusammengesetzt werden, Destruktoren, das sind Funktionen, die ein Objekt in seine Bestandteile zerlegen, in einen neuen Zustand überführen (OO- Sprech: Methoden) oder primitive Daten berechnen, die Eigenschaften des Objekts (Farbe, Größe, etc.) wiedergeben (OO- Sprech: Attribute).

Konstruktor- versus destruktorbasierte Modelle Die Trägermenge eines maximalen konstruktorbasierten Modells besteht aus den Ausdrücken (Termen), die man aus den Konstruktoren und den primitiven Daten des Modells formen kann. Weitere konstruktorbasierte Modelle entstehen durch Abstraktion, mathematisch: Quotientenbildung, d.h. Gleichsetzung von Termen, die dasselbe Objekt repräsentieren, z.b. von 5+4, 3*3 und 9. In der funktionalen Programmiersprache Haskell können konstruktorbasierte Modelle mit Hilfe des data-konstrukts implementiert werden. 5

6 Beispiel Ein Teil des Datentyps von Expander2 zur Beschreibung zweidimensionaler geometrischer Figuren: data Widget = Arc State ArcStyleType Float Float Circ State Float File String Oval State Float Float Path0 Color Int [Point] Path State [Point] Poly State [Float] Float Rect State Float Float Text State [String] Tria State Float Turtle State [TurtleAct]

7 Hinter = werden die Konstruktoren mit den Typen ihrer jeweiligen Argumente getrennt durch das oder-symbol aufgelistet. [a] bezeichnet den Typ der Folgen von Elementen des Typs a. Weitere Hilfstypen von Widget: type Point = (Float,Float) type State = (Point,Float,Color,Int) Auch diese Typen sind mit Konstruktoren aufgebaut, z.b. Point mit der Bildung von Paaren reeller Zahlen. Die vier Komponenten eines Zustands vom Typ State sind der Mittelpunkt, die Orientierung (in Grad), der reine Farbwert und die (zum Farbwert hinzuaddierte) Helligkeit der jeweiligen Figur.

8 Widget ist wechselseitig rekursiv mit [TurtleAct] definiert: data TurtleAct = Move Float Jump Float Turn Float Widg Widget Open Color Close Ein Objekt des Typs [TurtleAct] ist also eine Folge von Anweisungen (an eine Schildkröte), sich auf der Fläche weiter zu bewegen (Move), weiter zu springen (Jump), ihre Orientierung zu ändern (Turn) oder ein Widget zu zeichnen (Widg). Trifft die Schildkröte auf den Befehl Open color, dann merkt sie sich den Punkt p, an dem sie gerade steht. Trifft sie später auf Close, dann zeichnet sie den Weg, den sie von p aus unter Auslassung der Sprünge zurückgelegt hat, in der Farbe color und springt anschließend zu p zurück.

9

10 Der Pythagoreische Baum wurde rekursiv erzeugt: pytree :: Int -> Color -> [TurtleAct] pytree n = f n where f 0 c = [] f i c = growacts (bud 3 c) [[],acts,acts,[]] where acts = f (i-1) (nextcolor n c) n ist die Höhe des Baumes. bud 3 c ist der c-farbige Stamm des Baumes. growacts lässt zwei Zweige aus den Schrägen des Stammes herauswachsen. nextcolor n c berechnet die in einem Farbkreis von n äquidistanten Farben auf c folgende Farbe.

11 Die durch ein Widget der Form Turtle (p,a,c,i) acts beschriebene Figur besteht aus den Wegen und Widgets, die entstehen, wenn die Schildkröte die Anweisungsfolge acts im Zustand (p,a,c,i) ausführt. Die Anweisungsfolge beschreibt die Figur zwar nur indirekt, aber dennoch eindeutig. Eine solche Beschreibung ist ein destruktorbasiertes oder zustandsorientiertes Modell.

Die Trägermenge eines minimalen destruktorbasierten Modells besteht aus Verhaltensbeschreibungen, die man durch wenn möglich, wiederholte Anwendung der Destruktoren erhält. Aus Destruktoren bestehende Terme beschreiben nicht die Objekte selbst, sondern bilden Messinstrumente und liefern Ergebnisse in primitiven sichtbaren Datenbereichen. Aus den Ergebnissen wird auf bestimmte Eigenschaften des Objekts geschlossen. 12

13 Weitere destruktorbasierte Modelle entstehen durch Restriktion, mathematisch: Unterstrukturbildung, d.h. durch Beschränkung auf Objekte, deren Verhalten eine bestimmte, gegenüber der Anwendung von Destruktoren invariante Eigenschaft aufweist. Z.B. liefert die Menge der Bilder, die eine Schildkröte erstellen kann, wenn sie in einem festen Anfangszustand startet, eine Invariante. In Haskell können destruktorbasierte Modelle ebenfalls mit Hilfe des data-konstrukts implementiert werden, allerdings angereichert um Destruktoren.

14 Beispiel Der folgende Automat simuliert die Ausführung von Anweisungen an die Schildkröte: data TurtleAut state = C {move,jump,turn :: Float -> state -> state, widg :: Widget -> state -> state, open :: Color -> state -> state, close :: state -> state} type TState = ([Widget],[State,[Point])]) turtleaut :: State -> TurtleAut TState

turtleaut (p,a,c,i) = C {move d (pict,(p,a,c,ps):s) = (pict,(q,a,c,ps++[q]):s) where q = successor p d a jump d (pict,(p,a,c,ps):s) = (pict++[path0 c i ps],(q,a,c,ps):s) where q = successor p d a turn b (pict,(p,a,c,ps):s) = (pict,(p,a+b,c,ps):s) widg w (pict,(p,a,c,ps):s) = (pict++[moveturn p a w],(p,a,c,ps):s), open d (pict,(p,a,c,ps):s) = (pict,(p,a,d,[p]):(p,a,c,ps):s), close (pict,(p,a,c,ps):s) = (pict++[path0 c i ps],s)} 15

16 Der Automat wird in die Funktion makepict eingebunden, die alle Widgets in Oval-, Path0- und Text-Widgets übersetzt: makepict :: Widget -> [Widget] makepict (Turtle state acts) = fst (foldl eval tstate acts) where tstate = ([],[(state,[p])]) aut = turtleaut state eval :: TState -> TurtleAct -> TState eval state act = (case act of Move d -> move aut d Jump d -> jump aut d Turn a -> turn aut a Widg w -> widg aut w Open c -> open aut c Close -> close aut) state

17 eval eval eval eval eval tstate act 1 act 2 act 3 act 4 act 5 Faltung der Aktionsfolge [act 1,..., act 5 ] von links her

18 Faltung einer Folge [b 0, b 1,..., b n ] von rechts her f f f f f b 0 b 1 b 2 b 3 b 4 state foldr :: (b -> state -> state) -> state -> [b] -> state foldr f state [] = state foldr f state (b:bs) = f b (foldr f state bs) sum = foldr (+) 0 product = foldr (*) 1

19 Beispiel Horner-Schema (effiziente Berechnung von Polynomwerten) Anstelle des Terms b 0 + b 1 x + b 2 x 2 + + b n 1 x n 1 + b n x n wird der Term b 0 + (b 1 + (b 2 + + (b n 1 + b n x) x... ) x) x ausgewertet. horner :: [Float] -> Float -> Float horner bs x = foldr f (last bs) (init bs) where f b state = b+state*x Sowohl die Zustände als auch die Folgenelemente sind hier reelle Zahlen vom Typ Float.

20 Links http://haskell.org http://tryhaskell.org http://ls1-www.cs.tu-dortmund.de/ padawitz