Heutiges Thema... Datenstrukturen in Haskell... Algebraische Datentypen (data Tree =...) Typsynonyme (type Student =...)



Ähnliche Dokumente
Datentypdeklarationen in Haskell. Heutiges Thema... Zum Einstieg und Vergleich... (1) Grundlegende Typmuster

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

Programmieren in Haskell Einführung

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Funktionale Programmierung mit Haskell

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

CGI Programmierung mit Ha. Markus Schwarz

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Programmieren Tutorium

Einführung in die Java- Programmierung

Programmierkurs Java

Scala kann auch faul sein

Diana Lange. Generative Gestaltung Operatoren

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Arrays Fortgeschrittene Verwendung

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Objektorientierte Programmierung

Übungen Programmieren 1 Felix Rohrer. Übungen

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

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

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

Einführung in die Programmierung (EPR)

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Felder. November 5, 2014

Einführung in die Programmierung

Grundlagen von Python

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

Prüfungszeiten für den Studiengang Bachelor of Science in Psychologie

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

INFORMATIONEN FÜR DIE PRAXIS

Einführung in die Programmierung

Beispiele: (Funktionen auf Listen) (3) Bemerkungen: Die Datenstrukturen der Paare (2) Die Datenstrukturen der Paare

Generelle Einstellungen

Java Einführung Operatoren Kapitel 2 und 3

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Einführung in die Java- Programmierung

Datentypen. Agenda für heute, 4. März, Pascal ist eine streng typisierte Programmiersprache

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

Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom : Rekursive Datentypen

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Grundlagen der Informatik

Übungsblatt 3: Algorithmen in Java & Grammatiken

Modellierung und Programmierung 1

Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS Prof. Dr. Margarita Esponda. Prof. Dr.

2. Programmierung in C

Objektorientierte Programmierung

ALP I. Funktionale Programmierung

1 topologisches Sortieren

Lineare Gleichungssysteme

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Funktionale Programmierung

Rundung und Casting von Zahlen

DATENSTRUKTUREN UND ZAHLENSYSTEME

Vorkurs C++ Programmierung

9 Auto. Rund um das Auto. Welche Wörter zum Thema Auto kennst du? Welches Wort passt? Lies die Definitionen und ordne zu.

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Einführung in die Programmierung

5.4 Klassen und Objekte

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Erwin Grüner

Formale Spezialisierungstechniken. am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009

Auszug aus der HSQV-Spielordnung: 19.1 Spieltermine

Graphic Coding. Klausur. 9. Februar Kurs A

1 Mathematische Grundlagen

Computeranwendung und Programmierung (CuP)

SEP 114. Design by Contract

Verkehrsteilnehmer. Beispiel: Wir betrachten die Modellierung von Handlungskomponenten wie Verkehrsteilnehmern und Straßen.

Einführung in die Programmierung für NF

1. Probeklausur zu Programmierung 1 (WS 07/08)

Kurs 1613 Einführung in die imperative Programmierung

Informationsblatt Induktionsbeweis

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

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie

Idee: Wenn wir beim Kopfknoten zwei Referenzen verfolgen können, sind die Teillisten kürzer. kopf Eine Datenstruktur mit Schlüsselwerten 1 bis 10

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Datenstrukturen & Algorithmen

Hier findet ihr alle Informationen rund um s Studium in den Sozialwissenschaften: Prüfungsordnung:

Informatik Java-Programmierkurs im Rahmen der Berufs- u. Studienorientierung für Schüler. Joliot-Curie-Gymnasium GR 2010 Nico Steinbach

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Von Bits, Bytes und Raid

Tag 7. Pattern Matching und eigene Datentypen

KONSTRUKTION VON ROT-SCHWARZ-BÄUMEN

Einführung in die Programmierung für Wirtschaftsinformatik

368 4 Algorithmen und Datenstrukturen

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

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

Sowohl die Malstreifen als auch die Neperschen Streifen können auch in anderen Stellenwertsystemen verwendet werden.

Lizenzen auschecken. Was ist zu tun?

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

ARAkoll 2013 Dokumentation. Datum:

BERECHNUNG DER FRIST ZUR STELLUNGNAHME DES BETRIEBSRATES BEI KÜNDIGUNG

Sehr geehrte Faktor-IPS Anwender,

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

Diagnostisches Interview zur Bruchrechnung

Vergleich: Positionen der Word 2003-Befehle in Word

Übungen für Woche 10

Kurze Anleitung zum Guthaben-Aufladen bei.

Lineare Funktionen. 1 Proportionale Funktionen Definition Eigenschaften Steigungsdreieck 3

Transkript:

Heutiges Thema... Datenstrukturen in Haskell... Algebraische Datentypen (data Tree =...) Typsynonyme (type Student =...) Spezialitäten (newtype State =...) Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 1

Datentypdeklarationen in Haskell...selbstdefinierte (neue) Datentypen in Haskell! Haskells Vehikel dafür: Algebraische Typen Algebraische Typen erlauben uns zu definieren... Summentypen Spezialfälle Produkttypen Aufzählungstypen In der Praxis besonders wichtige Varianten... Rekursive Typen ( unendliche Datenstrukturen) Polymorphe Typen ( Wiederverwendung): Später! Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 2

Grundlegende Typmuster Aufzählungs-, Produkt- und Summentypen: Aufzählungstypen Typen mit endlich vielen Werten...typisches Beispiel: Typ Jahreszeiten mit Werten Fruehling, Sommer, Herbst und Winter. Produkttypen (synonym: Verbundtypen) Typen mit möglicherweise unendlich vielen Tupelwerten...typisches Beispiel: Typ Person mit Werten (Adam, maennlich, 27), (Eva, weiblich, 25), etc. Summentypen (synonym: Vereinigungstypen) Vereinigung von Typen mit möglicherweise jeweils unendlich vielen Werten...typisches Beispiel: Typ Verkehrsmittel als Vereinigung der (Werte der) Typen Auto, Schiff, Flugzeug, etc. Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 3

Zum Einstieg und Vergleich... (1) Realisierung von Typdefinitionen in imperativen Sprachen...hier am Bsp. von Pascal Aufzählungstypen TYPE jahreszeiten = (fruehling, sommer, herbst, winter); spielkartenfarben = (kreuz, pik, herz, karo); werktage = (montag, dienstag, mittwoch, donnerstag, freitag); transportmittel = (fahrrad, auto, schiff, flugzeug); form = (kreis, rechteck, quadrat, dreieck); Produkttypen TYPE person = RECORD name: ARRAY [1..42] OF char; geschlecht: (maennlich, weiblich); alter: integer END; Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 4

Zum Einstieg und Vergleich... (2) Summentypen TYPE verkehrsmittel = RECORD CASE vkm: transportmittel OF fahrrad: (tandem: Boolean); auto: (hersteller: ARRAY [1..30] OF char; hubraum: real); schiff: (name: ARRAY [1..30] OF char; tiefgang: real; heimathafen: ARRAY [1..50] OF char); flugzeug: (reichweite: real; sitzplaetze: integer) END; geometrischefigur = RECORD CASE fgr: form OF kreis: (radius: real); rechteck : (breite, hoehe: real); quadrat : (seitenlaenge, diagonale: real); dreieck: (s1, s2, s3: real; rechtwkg: boolean); END;

Zum Einstieg und Vergleich... (3) Aufzählungstypen, Produkttypen, Summentypen... In Pascal In Haskell...drei verschiedene Sprachkonstrukte...ein einheitliches Sprachkonstrukt die algebraische Datentypdefinition Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 6

Zum Einstieg und Vergleich... (4) Obige Einstiegsdatentypbeispiele in Haskell... Aufzählungstyp Jahreszeiten data Jahreszeiten = Fruehling Sommer Herbst Winter data Werktage = Montag Dienstag Mittwoch Donnerstag Freitag data Bool = True False Produkttyp Person data Person = Pers Name Geschlecht Alter mit type Name = String type Alter = Int data Geschlecht = Maennlich Weiblich Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 7

Zum Einstieg und Vergleich... (5) Summentyp Verkehrsmittel data Verkehrsmittel = Fahrrad Bool Auto String Float Schiff String Float String Flugzeug Float Int In obiger Form offenbar wenig transparent im Vergleich zu: TYPE verkehrsmittel = RECORD CASE vkm: transportmittel OF fahrrad: (tandem: Boolean); auto: (hersteller: ARRAY [1..30] OF char; hubraum: real); schiff: (name: ARRAY [1..30] OF char; tiefgang: real; heimathafen: ARRAY [1..50] OF char); flugzeug: (reichweite: real; sitzplaetze: integer) END; Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 8

Zum Einstieg und Vergleich... (5) Summentyp Verkehrsmittel data Verkehrsmittel = Fahrrad Tandem Auto Hersteller Hubraum Schiff Name Tiefgang Heimathafen Flugzeug Spannweite Sitzplaetze mit type Tandem = Bool type Hersteller = String type Hubraum = Float type Name = String type Tiefgang = Float type Heimathafen = String type Reichweite = Float type Sitzplaetze = Int Man erkennt: Typsynonyme bringen Transparenz ins Programm!

Algebraische Datentypen in Haskell...das allg. Muster der algebraischen Datentypdefinition: data Typename = Con1 t11... t1k1 Con2 t21... t2k2... Conn tn1... tnkn Sprechweisen: Typename...Typname/-identifikator Con i, i = 1..n...Konstruktor(en)/-identifikatoren k i, i = 1..n...Stelligkeit des Konstruktors Con i, k i 0, i = 1,..., n Beachte: Typ- und Konstruktoridentifikatoren müssen mit einem Großbuchstaben beginnen (siehe z.b. True, False)!

Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 11 Konstruktoren......können als Funktionsdefinitionen gelesen werden: Con i :: t i1 ->... -> t iki -> Typename Konstruktion von Werten eines algebraischen Datentyps durch......anwendung eines Konstruktors auf Werte passenden Typs, d.h... Con i v i1... v iki :: Typname Beispiele: wobei v i1 :: t i1... v iki :: t iki, j = 1,..., k i Pers "Adam" Maennlich 27 :: Person Schiff "Donaukönigin" 2.74 "Wien" :: Verkehrsmittel Flugzeug 8540.75 275 :: Verkehrsmittel

Aufzählungstypen (1) Nullstellige Konstruktoren führen auf Aufzählungstypen... Beispiele: data Spielfarbe = Kreuz Pik Herz Karo data Wochenende = Sonnabend Sonntag data Geschlecht = Maennlich Weiblich data Form = Kreis Rechteck Quadrat Dreieck Insbesondere ist der Typ der Wahrheitswerte... data Bool = True False...Beispiel eines in Haskell vordefinierten Aufzählungstyps. Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 12

Aufzählungstypen (2) Funktionsdefinitionen über Aufzählungstypen... üblicherweise mit Hilfe von Pattern-matching. Beispiele: hatecken :: Form -> Bool hatecken Kreis = False hatecken _ = True istlandgebunden :: Verkehrsmittel -> Bool istlandgebunden Fahrrad = True istlandgebunden Auto = True istlandgebunden _ = False Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 13

Produkttypen (Alternativenlose) mehrstellige Konstruktoren führen auf Produkttypen... Beispiel: type Name = String type Alter = Int data Geschlecht = Maennlich Weiblich data Person = Pers Name Geschlecht Alter Beispiele:...für Werte des Typs Person. Pers "Paul Pfiffig" Maennlich 23 :: Person Pers "Paula Plietsch" Weiblich 22 :: Person Beachte: Funktionalität der Konstruktorfunktion ist hier... Pers :: Name -> Geschlecht -> Alter -> Person Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 14

Summentypen (1) Mehrere (null- oder mehrstellige) Konstruktoren führen auf Summentypen... Beispiel: type Radius = Float type Breite = Float type Hoehe = Float type Seite1 = Float type Seite2 = Float type Seite3 = Float type Rechtwinklig = Bool data XFigur = Kreis Radius Rechteck Breite Hoehe Quadrat Kantenlaenge Dreieck Seite1 Seite2 Seite3 Rechtwinklig Ebene Die Varianten einer Summe werden durch getrennt.

Summentypen (2) Beispiele:...für Werte des Typs erweiterte Figur XFigur Kreis 3.14 :: XFigur Rechteck 17.0 4.0 :: XFigur Quadrat 47.11 :: XFigur Dreieck 3.0 4.0 5.0 True :: XFigur Ebene :: XFigur Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 16

Zwischenfazit Somit ergibt sich die eingangs genannte Taxonomie algebraischer Datentypen... Haskell offeriert... Summentypen mit den beiden Spezialfällen Produkttypen nur ein Konstruktor, mehrstellig Aufzählungstypen ein oder mehrere Konstruktoren, alle nullstellig Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 17

Rekursive Typen (1)...der Schlüssel zu (potentiell) unendlichen Datenstrukturen. Technisch:...zu definierende Typnamen können rechtsseitig in der Definition benutzt werden. Beispiel:...(arithmetische) Ausdrücke data Expr = Opd Int Add Expr Expr Sub Expr Expr Squ Expr Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 18

Rekursive Typen (2) Beispiele...für Ausdrücke (lies --> als entspricht ). Opd 42 :: Expr --> 42 Add (Opd 17) (Opd 4) :: Expr --> 17+4 Add (Squ (Sub (Opd 42) (Squ (2)))) (Opd 12) :: Expr --> square(42-square(2))+12...rekursive Typen ermöglichen potentiell unendliche Datenstrukturen! Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 19

Rekursive Typen (3) Weiteres Beispiel: Binärbäume, hier zwei verschiedene Varianten: data BinTree1 = Nil Node Int BinTree1 BinTree1 data BinTree2 = Leaf Int Node Int BinTree2 BinTree2 Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 20

Rekursive Typen (4) Veranschaulichung der Binärbaumvarianten 1&2 anhand eines Beispiels: Variante 1 Node 45 Node 23 Node 11 Node 12 "Leerer" Baum Nichtleerer Baum Variante 2 Node 45 Node Leaf 42 Leaf Node 23 11 Node 12 37 28 99 Leaf Leaf Leaf 64 Leaf 86

Rekursive Typen (5) Beispiele...für Funktionen über Binärbaumvariante 1. valbintree1 :: BinTree1 -> Int valbintree1 Nil = 0 valbintree1 (Node n bt1 bt2) = n + valbintree1 bt1 + valbintree1 bt2 depthbintree1 :: BinTree1 -> Int depthbintree1 Nil = 0 depthbintree1 (Node _ bt1 bt2) = 1 + max (depthbintree1 bt1) (depthbintree1 bt2) Mit diesen Definitionen... valbintree1 Nil == 0 valbintree1 (Node 17 Nil (Node 4 Nil Nil)) == 21 depthbintree1 (Node 17 Nil (Node 4 Nil Nil)) == 2 depthbintree1 Nil == 0 Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 22

Rekursive Typen (6) Beispiele...für Funktionen über Binärbaumvariante 2. valbintree2 :: BinTree2 -> Int valbintree2 (Leaf n) = n valbintree2 (Node n bt1 bt2) = n + valbintree2 bt1 + valbintree2 bt2 depthbintree2 :: BinTree2 -> Int depthbintree2 (Leaf _) = 1 depthbintree2 (Node _ bt1 bt2) = 1 + max (depthbintree2 bt1) (depthbintree2 bt2) Mit diesen Definitionen... valbintree2 (Leaf 3) == 3 valbintree2 (Node 17 (Leaf 4) (Node 4 (Leaf 12) (Leaf 5))) == 42 depthbintree2 (Node 17 (Leaf 4) (Node 4 (Leaf 12) (Leaf 5))) == 3 depthbintree2 (Leaf 3) == 1 Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 23

Wechselweise rekursive Typen...ein Spezialfall rekursiver Typen. Beispiel: data Individual = Adult Name Address Biography Child Name data Biography = Parent String [Individual] NonParent String Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 24

Typsynonyme (1)...hatten wir bereits kennengelernt bei der Einführung von Tupeltypen: type Student = (String, String, Int) type Buch = (String, String, Int, Bool)...und auch in den Beispielen zu algebraischen Datentypen benutzt: data Verkehrsmittel = Fahrrad Tandem Auto Hersteller Hubraum Schiff Name Tiefgang Heimathafen Flugzeug Spannweite Sitzplaetze type Tandem type Hersteller type Hubraum type Name type Tiefgang type Heimathafen type Reichweite type Sitzplaetze = Bool = String = Float = String = Float = String = Float = Int Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 25

Typsynonyme (2) Das Schlüsselwort type leitet die Deklaration von Typsynonymen ein Unbedingt zu beachten ist... type...führt neue Namen für bereits existierende Typen ein (Typsynonyme!), keine neuen Typen. Somit gilt: Durch type-deklarationen eingeführte Typsyonyme... tragen zur Dokumentation bei und erleichtern (i.a.) das Programmverständnis aber... führen nicht zu (zusätzlicher) Typsicherheit!

Ein (pathologisches) Beispiel type Euro = Float type Yen = Float type Temperature = Float mypi :: Float daumen :: Float maxtemp :: Temperature mypi = 3.14 daumen = 5.55 maxtemp = 43.2 currencyconverter :: Euro -> Yen currencyconverter x = x + mypi * daumen Mit obigen Deklarationen... currencyconverter maxtemp => 60.627...werden 43.2 C in 60.627 Yen umgerechnet. Typsicher? Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 27

Ein reales Beispiel Anflugsteuerung einer Sonde zum Mars... type Geschwindigkeit = Float type Meilen = Float type Km = Float type Zeit = Float type Wegstrecke = Meilen type Distanz = Km geschwindigkeit :: Wegstrecke -> Zeit -> Geschwindigkeit geschwindigkeit w z = (/) w z verbleibendeflugzeit :: Distanz -> Geschwindigkeit -> Zeit verbleibendeflugzeit d g = (/) d g verbleibendeflugzeit 18524.34 1523.79...durch Typisierungsprobleme dieser Art ging vor einigen Jahren eine Marssonde im Wert von mehreren 100 Mill. USD verloren. Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 28

Produkttypen vs. Tupeltypen (1) Der Typ Person als... Produkttyp data Person = Pers Name Geschlecht Alter Tupeltyp type Person = (Name, Geschlecht, Alter) Vordergründiger Unterschied:...in der Tupeltypvariante fehlt der Konstruktor (in diesem Bsp.: Pers) Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 29

Produkttypen vs. Tupeltypen (2)...eine Abwägung von Vor- und Nachteilen. Produkttypen und ihre typischen... Vorteile gegenüber Tupeltypen Objekte des Typs sind mit dem Konstruktor markiert (trägt zur Dokumentation bei) Tupel mit zufällig passenden Komponenten nicht irrtümlich als Elemente des Produkttyps manipulierbar (Typsicherheit! Vgl. früheres Beispiel zur Umrechnung Euro in Yen!) Aussagekräftigere (Typ-) Fehlermeldungen (Typsynonyme können wg. Expansion in Fehlermeldungen fehlen). Nachteile gegenüber Tupeltypen Produkttypelemente sind weniger kompakt, erfordern längere Definitionen (mehr Schreibarbeit) Auf Tupeln vordefinierte polymorphe Funktionen (z.b. fst, snd, zip, unzip,...) stehen nicht zur Verfügung. Der Code ist weniger effizient.

Andererseits... Mit Produkttypen statt Typsynoymen... data Euro = EUR Float data Yen = YEN Float data Temperature = Temp Float mypi :: Float daumen :: Float maxtemp :: Temperature mypi = 3.14 daumen = 5.55 maxtemp = Temp 43.2...wäre eine Funktionsdefinition im Stile von currencyconverter :: Euro -> Yen currencyconverter x = x + mypi * daumen insbesondere auch ein Aufruf wie... currencyconverter maxtemp durch das Typsystem von Haskell verhindert! Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 31

Somit als kurzes Fazit... (1)...unserer Überlegungen: Typsynonyme wie... type Euro = Float type Yen = Float type Temperature = Float...erben alle Operationen von Float und sind damit beliebig austauschbar mit allen Annehmlichkeiten und Gefahren, sprich Fehlerquellen. Produkttypen wie... data Euro = EUR Float data Yen = YEN Float data Temperature = Temp Float...erben keinerlei Operationen von Float, bieten dafür aber um den Preis zusätzlicher Schreibarbeit und gewissen Performanzverlusts Typsicherheit!

Somit als kurzes Fazit... (2) In ähnlicher Weise... data Miles = Mi Float data Km = Km Float type Distance = Miles type Wegstrecke = Km......wäre auch der Verlust der Marssonde vermutlich vermeidbar gewesen. Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 33

Spezialitäten...die newtype-deklaration: newtype Miles = Mi Float newtype-deklarationen sind im Hinblick auf... Typsicherheit...mit data-deklarationen vergleichbar Effizienz...mit type-deklarationen vergleichbar Beachte: newtype-deklarationen sind auf Typen mit nur einem Konstruktor eingeschränkt. Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 34

Polymorphe Typen...demnächst! Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 35

Vorschau auf die kommenden Aufgabenblätter... Ausgabe des... vierten Aufgabenblatts: Di, 30.10.2007...Abgabetermine: Di, den 06.11.2007, und Di, den 13.11.2007, jeweils 15:00 Uhr fünften Aufgabenblatts: Di, den 06.11.2007...Abgabetermine: Di, den 13.11.2007, und Di, den 20.11.2007, jeweils 15:00 Uhr sechsten Aufgabenblatts: Di, den 13.11.2007...Abgabetermine: Di, den 20.11.2007, und Di, den 27.11.2007, jeweils 15:00 Uhr Funktionale Programmierung (WS 2007/2008) / 4. Teil (30.10.2007) 36

Do, 29.11.2007, Vorlesung von 16:30 Uhr bis 18:00 Uhr im Radinger-Hörsaal Vorschau auf die nächsten Vorlesungstermine... Do, 01.11.2006: Keine Vorlesung! (Allerheiligen) Do, 08.11.2007, Vorlesung von 16:30 Uhr bis 18:00 Uhr im Radinger-Hörsaal Do, 15.11.2007: Keine Vorlesung! (Tag des Landespatrons, TU-weit LVA-frei) Di, 20.11.2007, Vorlesung von 13:00 Uhr bis 14:00 Uhr im Informatik-Hörsaal Do, 22.11.2007: Keine Vorlesung! (epilog, Diplomarbeitspräsentation, FfI-weit LVA-frei ab 15:00 Uhr) Di, 27.11.2007, Vorlesung von 13:00 Uhr bis 14:00 Uhr im Informatik-Hörsaal