3.1.4 Benutzerdefinierte Datentypen

Größe: px
Ab Seite anzeigen:

Download "3.1.4 Benutzerdefinierte Datentypen"

Transkript

1 3.1.4 Benutzerdefinierte Datentypen Übersicht: Vereinbarung von Typbezeichnern Deklaration neuer Typen Summentypen Rekursive Datentypen Fast alle modernen Spezifikations- und Programmiersprachen gestatten es dem Benutzer, neue Typen zu definieren. Vereinbarung von Typbezeichnern ML erlaubt es, Bezeichner für Typen zu deklarieren (vgl. Folie 105). Dabei wird kein neuer Typ definiert, sondern nur ein Typ an einen Bezeichner gebunden. 08/06/08 58

2 Beispiele: (Typvereinbarungen) type intpaar = int * int type charlist = char list type adresse = string * string* string * int type telefonbuch = ( adresse * string list ) list type intnachint = int! int ; val fakultaet : intnachint = fac ; Typvereinbarungen sind nur Abkürzungen. Zwei unterschiedliche Bezeichner können den gleichen Typ bezeichnen; z.b.: - type inttripel = int * int * int; type inttripel = int * int * int - type date = int * int * int; type date = int * int * int - fun kalenderwoche (d:date): int =... ; val kalenderwoche = fn : date -> int - kalenderwoche (192,45,111111); 08/06/08 59

3 Deklaration neuer Typen Neue Typen werden in ML mit dem datatype-konstrukt definiert, das im Folgenden schrittweise erläutert wird. Definition eines neuen Typs und Konstruktors: datatype <Typbezeichner> = <Konstruktorbezeichner> of <TypAusdruck> Die obige Datatypdeklaration definiert: - einen neuen Typ und bindet ihn an <Typbezeichner> - eine Konstruktorfunktion, die Werte des durch den Typausdruck beschriebenen Typs in den neuen Typ einbettet. Die Konstruktorfunktion ist injektiv. 08/06/08 60

4 Beispiel: (Definition von Typ und Konstruktor) datatype person = Student of string * string * int * int definiert den neuen Typ person und den Konstruktor Student: string*string*int*int -> person Wir definieren die Selektorfunktionen: - fun vorname (Student(v,n,g,m)) = v ; val vorname = fn : person -> string - fun name (Student(v,n,g,m)) = n ; val name = fn : person -> string - fun geburtsdatum (Student(v,n,g,m)) = g ; val geburtsdatum = fn : person -> int - fun matriknr (Student(v,n,g,m)) = m ; val matriknr = fn : person -> int 08/06/08 61

5 Jede Datentypdeklaration definiert einen neuen Typ, d.h. insbesondere: - Werte vom Argumentbereich des Konstruktors sind inkompatibel mit dem neuen Typ; - Werte strukturgleicher benutzerdefinierter Typen sind inkompatibel. Beispiele: (Typkompatibilität) 1. Der Typ person ist inkompatibel mit dem Typ string*string*int*int, insbesondere ist vorname ( Niels, Bohr, , 221) nicht typkorrekt. 2. Der Typ person ist inkompatibel mit dem strukturgleichen Typ adresse datatype adresse = WohnAdresse of string * string * int * int Insbesondere ist name (WohnAdresse( Pfaffenbergstraße, nicht typkorrekt. Kaiserslautern, 27, ) ) 08/06/08 62

6 Bemerkung: Den Konstruktor kann man sich als eine Markierung der Werte seines Argumentbereichs vorstellen. Dabei werden Werte mit unterschiedlicher Markierung als verschieden betrachtet. Summentypen Ein Summentyp stellt die disjunkte Vereinigung der Elemente anderen Typen zu einem neuen Typ dar. Die meisten modernen Programmiersprachen unterstützen die Deklaration von Summentypen. Summentypen in ML: Bei einer Datentypdeklaration kann man verschiedene Alternativen angeben: datatype <Typbezeichner> = <Konstruktorbezeichner1> of <TypAusdruck1>... <KonstruktorbezeichnerN> of <TypAusdruckN> 08/06/08 63

7 Beispiele: (Summentypen) 1. Ein anderer Datentyp zur Behandlung von Personen: datatype person2 = Student of string*string*int*int Mitarbeiter of string*string*int*int Professor of string*string*int*int*string 2. Eine benutzerdefinierte Datenstruktur für Zahlen: - datatype number = Intn of int Realn of real - fun isint (Intn m) = true isint (Realn r) = false ; val isint = fn : number -> bool - fun isreal (Intn m) = false isreal (Realn r) = true ; val isreal = fn : number -> bool - fun neg (Intn m) = Intn (~m) neg (Realn r) = Realn (~r); val neg = fn : number -> number 08/06/08 64

8 - fun plus (Intn m,intn n) = Intn (m+n) plus (Intn m,realn r) = Realn((real m) +r) plus (Realn r,intn m) = Realn(r+(real m)) plus (Realn r,realn q)= Realn(r+q); val plus = fn : number * number -> number Begriffsklärung: Konstruktorfunktionen oder Konstruktoren liefern Werte des neu definierten Datentyps. Sie können in Mustern verwendet werden (z.b.: Student, Intn). Diskriminatorfunktionen oder Diskriminatoren prüfen, ob der Wert eines benutzerdefinierten Datentyps zu einer bestimmten Alternative gehört (Beispiel: isint). Selektorfunktionen oder Selektoren liefern Komponenten von Werten des definierten Datentyps (z.b.: vorname, name,...). Bemerkung: In funktionalen Sprachen kann man meist auf Selektorfunktionen verzichten. Man wendet stattdessen Pattern. 08/06/08 65

9 Weitere Formen des datatype-konstrukts: Das datatype-konstrukt kann auch verwendet werden, um Aufzählungstypen zu definieren. Dabei wird in den Alternativen der Teil beginnend mit dem Schlüsselwort of weggelassen. Die Wertemenge eines Aufzählungstyps ist eine endliche Menge (von Namen). Beispiele: (Aufzählungstypen) - datatype wochentag = Montag Dienstag Mittwoch Donnerstag Freitag Samstag Sonntag ; - fun istmittwoch Mittwoch = true istmittwoch w = false ; Oder knapper: - fun istmittwoch w = (w=mittwoch) ; 08/06/08 66

10 Beide Formen der Datentypdeklaration können kombiniert werden; z.b.: - datatype intbottom = Bottom Some of int Datentypdeklarationen lassen sich parametrisieren. Die Typparameter werden dabei vor den vereinbarten Typbezeichner gestellt: - datatype a bottom = Bottom Some of a ML sieht dafür standardmäßig den folgenden Typ vor: - datatype a option = NONE SOME of a Zur Erweiterung von Summentypen Im Gegensatz zur objektorientierten Programmierung (vgl. Kapitel 5) lassen sich die Summentypen in der funktionalen Programmierung meist nicht erweitern, d.h. einem definierten Datentyp können im Nachhinein keine Alternativen hinzugefügt werden. 08/06/08 67

11 Beispiel: (Erweiterung von Summentypen) Den Datentyp person2: datatype person2 = Student of string*string*int*int Mitarbeiter of string*string*int*int Professor of string*string*int*int*string hätte man aus person durch Hinzufügen der Alternativen für Mitarbeiter und Professoren gewinnen können. Bemerkung: Die Möglichkeit, einen Datentypen T nachträglich erweitern zu können, bringt zwei Vorteile für die Wiederverwendung mit sich: 1. Der Programmieraufwand wird reduziert. 2. Programme, die für T entwickelt wurden, können teilweise weiter benutzt werden. In ML müssen Erweiterungen im Allg. durch neue Summentypen realisiert werden. 08/06/08 68

12 Beispiel: Ein Datentyp dt : datatype dt = Constr1 of t1 Constr2 of t2 Constr3 of t3 Constr4 of t4 soll eine fünfte Alternative bekommen. Statt alle existierenden Programme auf fünf Alternativen umzustellen, kann man mit dtneu arbeiten: datatype dtneu = Constr0 of dt Constr5 of t5 Nachteil: Die Programme müssen auf dtneu angepasst werden. Bemerkung: Der Datentyp exn ist in ML erweiterbar. Jede Ausnahme-Vereinbarung fügt eine Alternative hinzu. 08/06/08 69

13 Rekursive Datentypen Von großer Bedeutung in der Programmierung sind rekursive Datentypen. Definition: (rekursive Datentypdeklaration) Eine Datentypdeklaration heißt direkt rekursiv, wenn der definierte Typ in einer der Alternativen der Datentypdeklaration vorkommt. Wie bei Funktionen gibt es auch verschränkt rekursive Datentypdeklarationen. Eine Datentypdeklaration heißt rekursiv, wenn sie direkt rekursiv ist oder Element einer Menge verschränkt rekursiver Datentypdeklarationen ist. Begriffsklärung: (rekursiver Datentyp) Ein Datentyp heißt rekursiv, wenn er mit einer rekursiven Datentypdeklaration definiert wurde. 08/06/08 70

14 Beispiele: (Listendatentypen) 1. Ein Datentyp für Integer-Listen: - datatype intlist = nil Cons of int * intlist ; 2. Ein Datentyp für homogene Listen mit Elementen von beliebigem Typ: - datatype a list = Vorsicht: nil Cons of a * a list Diese Deklaration verdeckt den vordefinierten Datentyp a list. 3. Der vordefinierte Datentyp für homogene Listen mit Elementen von beliebigem Typ: - datatype a list = nil :: of a * a list 08/06/08 71

15 Baumartige Datenstrukturen: Ottmann, Widmayer: Bäume gehören zu den wichtigsten in der Informatik auftretenden Datenstrukturen. A B D E C F G Begriffsklärung: (zu Bäumen) In einem endlich verzweigten Baum hat jeder Knoten endlich viele Kinder. Üblicherweise sagt man, die Kinder sind von links nach rechts geordnet.. Einen Knoten ohne Kinder nennt man Blatt, einen Knoten mit Kindern einen inneren Knoten oder Zweig. Den Knoten ohne Elter nennt man Wurzel. H 08/06/08 72

16 Ein Baum heißt markiert, wenn jeder Knoten k eine Markierung m(k) besitzt. In einem Binärbaum ist jeder Knoten entweder ein Blatt, oder er hat genau zwei Kinder. Zu jedem Knoten gehört ein Unterbaum. Datentyp für markierte Binärbaume: - datatype intbbaum = Blatt of int Zweig of int * intbbaum * intbbaum ; - val einbaum = Zweig (7, Zweig(3,(Blatt 2),(Blatt 4)), (Blatt 5)); - fun m (Blatt n) = n m (Zweig (n,lk,rk)) = n ; Ein mit ganzen Zahlen markierter Binärbaum heißt sortiert, wenn für alle Knoten k gilt: - Die Markierungen der linken Nachkommen von k sind kleiner als m(k). - Die Markierungen der rechten Nachkommen von k sind größer als m(k). 08/06/08 73

17 Aufgabe: Prüfe, ob ein Baum vom Typ intbbaum sortiert ist. Idee: Berechne zu jedem Unterbaum die minimale und maximale Markierung und prüfe rekursiv die Sortiertheitseigenschaft für alle Knoten/Unterbäume. fun maxmark (Blatt n) = n maxmark (Zweig (n,l,r)) = Int.max(n,Int.max(maxmark l, maxmark r)) fun minmark (Blatt n) = n minmark (Zweig (n,l,r)) = Int.min(n,Int.min(minmark l, minmark r)) fun istsortiert (Blatt n) = true istsortiert (Zweig (n,l,r)) = istsortiert l andalso istsortiert r andalso (maxmark l)<n andalso n<(minmark r) istsortiert einbaum 08/06/08 74

18 Wenig effiziente Lösung!! Besser ist es, die Berechnung von Minima und Maxima mit der Sortiertheitsprüfung zu verschränken. Idee: Entwickle eine Einbettung, die für sortierte Bäume auch Minimum und Maximum liefert. fun istsorteinbett (Blatt n) = (true,n,n) istsorteinbett (Zweig (n,l,r)) = let val (lerg,lmn,lmx) = istsorteinbett l val (rerg,rmn,rmx) = istsorteinbett r in ( lerg andalso rerg andalso end ; lmx<n andalso n<rmn, lmn, rmx ) fun istsortiert b = #1 (istsorteinbett b) Parametrische markierte Binärbaumtypen: 1. Alle Markierungen sind vom gleichen Typ: datatype a bbaum = Blatt of a Zweig of a * a bbaum * a bbaum 08/06/08 75

19 2. Blatt- und Zweigmarkierungen sind möglicherweise von unterschiedlichen Typen: datatype ( a, b) bbaum = Blatt of a Zweig of b * ( a, b) bbaum * ( a, b) bbaum Bäume mit variabler Kinderzahl: Bäume mit variabler Kinderzahl lassen sich realisieren: - durch mehrere Alternativen für Zweige (begrenzte Anzahl von Kindern) - durch Listen von Unterbäumen: datatype a baum = Kn of a * ( a baum list) fun zaehlekn (Kn (_,xs)) = Beachte: foldr op+ 1 (map zaehlekn xs) Der Rekursionsanfang ergibt sich durch Knoten mit leerer Unterbaumliste. 08/06/08 76

20 Bäume mit variabler Kinderzahl lassen sich z.b. zur Repräsentation von Syntaxbäumen verwenden, indem das Terminal- bzw. Nichtterminalsymbol als Markierung verwendet wird. Besser ist es allerdings, die Information über die Symbole mittels Konstruktoren auszudrücken. Dadurch gewinnt man an Typsicherheit (vgl. nächstes Beispiel). Verschränkte Datentypdeklarationen: Genau wie Funktionsdeklarationen werden verschränkt rekursive Datentypdeklarationen mit dem Schlüsselwort and verbunden: datatype <Typbezeichner1> = <Konstruktorbezeichner1_1> of <TypAusdruck1_1>... <Konstruktorbezeichner1_N> of <TypAusdruck1_N> and... and <TypbezeichnerM> = <KonstruktorbezeichnerM_1> of <TypAusdruckM_1>... <KonstruktorbezeichnerM_K> of <TypAusdruckM_K> 08/06/08 77

21 Beispiel: (verschränkte Datentypen) Der abstrakte Syntaxbaum eines Programms repräsentiert die Programmstruktur unter Verzicht auf Schlüsselworte und Trennzeichen. Rekursive Datentypen eignen sich sehr gut zur Beschreibung von abstrakter Syntax. Als Beispiel betrachten wir die abstrakte Syntax von Femto: datatype programm = Prog of wertdekl list * ausdruck and wertdekl = Dekl of string * ausdruck and ausdruck = Bzn of string Zahl of int Add of ausdruck * ausdruck Mul of ausdruck * ausdruck Das Programm val a = 73; ( a + 12 ) ; Wird durch folgenden Baum repräsentiert: Prog ( [Dekl ( a,zahl 73)], Add (Bzn a,zahl 12) ) Die Baumrepräsentation eignet sich besser als die Zeichenreihenrepräsentation zur weiteren Verarbeitung von Programmen. 08/06/08 78

22 Unendliche Datenobjekte: Eine nicht-leere Liste ist ein Wert, zu dem man sich das erste Element und eine Liste als Rest geben lassen kann. Hat die endliche Liste xl die Länge n>0, dann hat (tl xl) die Länge n-1. Eine unendliche Liste besitzt keine natürlichzahlige Länge und wird durch Anwendung von tl nicht kürzer. Unendliche Listen, häufig als Ströme (engl. stream) bezeichnet, sind die einfachsten unendlichen Daten- Objekte. In ML lassen sich unendliche Listen mit folgender Datenstruktur realisieren: datatype a stream = Nil Cons of a * ( unit -> a stream ) fun hd (Cons ( x, xf )) = x hd Nil = raise Empty fun tl (Cons ( x, xf )) = xf () tl Nil = raise Empty 08/06/08 79

23 Beispiel: (unendliche Liste) Liste aller (positiven) Dualzahlen dargestellt als Zeichenreichen: - fun incr (#"O"::xs) = #"L"::xs incr (#"L"::xs) = #"O":: incr xs incr [ ] = [ #"L" ] ; val incr = fn : char list -> char list - fun incrstr s = implode (rev (incr (rev (explode s)))); val incrstr = fn : string -> string - fun dualz_ab s = Cons (s, fn x=> dualz_ab (incrstr s)); val dualz_ab = fn: string -> string stream - val dl = dualz_ab "O" ; val dl = Cons ("O",fn) : string stream - hd dl; val it = "O" : string - val dl = tl dl; val dl = Cons ("L",fn) : string stream - val dl = tl dl; val dl = Cons ("LO",fn) : string stream 08/06/08 80

24 3.1.5 Felder/Arrays in ML Felder sind ein imperatives Sprachelement. Wir betrachten sie vor allem in Kapitel 4 und 5. Hier soll gezeigt werden, - wie imperative und funktionale Sprachkonstrukte zusammenwirken - wie Listen and Felder zusammenhängen Begriffsklärung: (Variable) Eine Speichervariable oder einfach nur Variable ist ein Speicher/Behälter für Werte. Charakteristische Operationen auf einer Variablen v: - Zuweisen eines Werts w an v; - Lesen des Wertes, den v enthält/speichert/hat. Der Zustand einer Variablen v ist undefiniert, wenn ihr noch kein Wert zugewiesen wurde; andernfalls ist der Zustand von v durch den gespeicherten Wert charakterisiert. Variablen stellen wir graphisch durch Rechtecke dar: v: true v1: 7 v enthält/speichert den Wert true v1 enthält/speichert den Wert 7 08/06/08 81

Weitere Operationen auf neu deklarierten Typen: Begriffsklärung: Weitere Anwendungen der datatype-deklaration: Beispiel: (Aufzählungstypen)

Weitere Operationen auf neu deklarierten Typen: Begriffsklärung: Weitere Anwendungen der datatype-deklaration: Beispiel: (Aufzählungstypen) Begriffsklärung: Weitere Operationen auf neu deklarierten Typen: Konstruktorfunktionen oder Konstruktoren liefern Werte des neu definierten Datentyps. Sie können in Mustern verwendet werden (z.b.: Student,

Mehr

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

Beispiele: (Funktionen auf Listen) (3) Bemerkungen: Die Datenstrukturen der Paare (2) Die Datenstrukturen der Paare Beispiele: (Funktionen auf Listen) (3) Bemerkungen: 5. Zusammenhängen der Elemente einer Liste von Listen: concat :: [[a]] -> [a] concat xl = if null xl then [] else append (head xl) ( concat (tail xl))

Mehr

Beschreibung von Werten: Beschreibung von Werten: (2) Begriffsklärung: (Ausdruck, expression) (2) Begriffsklärung: (Ausdruck, expression)

Beschreibung von Werten: Beschreibung von Werten: (2) Begriffsklärung: (Ausdruck, expression) (2) Begriffsklärung: (Ausdruck, expression) Beschreibung von Werten: Beschreibung von Werten: (2) mittels Konstanten oder Bezeichnern für Werte: 23 " Ich bin eine Zeichenreihe" True x durch direkte Anwendung von Funktionen: abs (-28382) "Urin" ++

Mehr

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen, Bäume)

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen, Bäume) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen,

Mehr

Beispiele: Funktionsabstraktion (3) Funktionsdeklaration. Funktionsdeklaration (2) Funktionsdeklaration (3) 3. Abstraktion über Funktionsbezeichner:

Beispiele: Funktionsabstraktion (3) Funktionsdeklaration. Funktionsdeklaration (2) Funktionsdeklaration (3) 3. Abstraktion über Funktionsbezeichner: Beispiele: Funktionsabstraktion (3) Funktionsdeklaration 3. Abstraktion über Funktionsbezeichner: Ausdruck: f (f x) Abstraktion: \ f x -> f (f x) Mit Bezeichnervereinbarung: twice = \ f x -> f (f x) erg

Mehr

Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen:

Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen: Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen: take 1 0 ( f i l t e r ( fn x => x mod 2=0) nat ) ; val it =

Mehr

Programmierung und Modellierung

Programmierung und Modellierung Programmierung und Modellierung Benutzerdefinierte Datentypen Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 1. Aufzählungstypen 2. Typen mit zusammengesetzten

Mehr

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. 4.5.5 Rekursive Typen Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. datatype IntList = Nil Cons o f ( i n t IntList ) ; Damit

Mehr

1. Probeklausur zur Programmierung I

1. Probeklausur zur Programmierung I DEPENDABLE SYSTEMS AND SOFTWARE Fachrichtung 6.2 Informatik Tutoren der Vorlesung 1. Probeklausur zur Programmierung I Name: Matrikelnummer: Bitte öffnen Sie das Klausurheft erst dann, wenn Sie dazu aufgefordert

Mehr

Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte)

Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte) Matrikelnummer: 1 Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte) Kreuzen Sie an, ob die folgenden Aussagen richtig oder falsch sind. Bewertung: keine Antwort: 0 Punkte richtige Antwort: +0.5 Punkte falsche

Mehr

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Lernziele Die Definition wichtiger Begriffe im Zusammenhand mit Bäumen zu kennen. Markierte Bäumen, insbesondere Suchbäume,

Mehr

Inhalt Kapitel 11: Formale Syntax und Semantik

Inhalt Kapitel 11: Formale Syntax und Semantik Inhalt Kapitel 11: Formale Syntax und Semantik 1 Abstrakte und konkrete Syntax 2 Lexikalische Analyse 3 Formale Sprachen, Grammatiken, BNF 4 Syntaxanalyse konkret 266 Abstrakte und konkrete Syntax Abstrakte

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Datenstruktur Liste Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 42 Formale Definition

Mehr

Berechnungsschemata: Funktion als Parameter abstrahiert Operation im Schema, wird bei Aufruf des Schemas konkretisiert

Berechnungsschemata: Funktion als Parameter abstrahiert Operation im Schema, wird bei Aufruf des Schemas konkretisiert 6. Funktionen als Daten, Übersicht Orthogonales Typsystem: Funktionen sind beliebig mit anderen Typen kombinierbar Notation für Funktionswerte (Lambda-Ausdruck): fn (z,k) => z*k Datenstrukturen mit Funktionen

Mehr

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Milners

Mehr

Funktionales Programmieren

Funktionales Programmieren Kapitel 3 3. Funktionales Programmieren 3.0 Übersicht 3. Funktionales Programmieren 3.0 Funktionales Programmieren 3. Funktionales Programmieren Grundkonzepte funktionaler Programmierung Zentrale Begriffe

Mehr

13 Abstrakte Datentypen

13 Abstrakte Datentypen 13 Abstrakte Datentypen Bisher: Konkrete Datentypen Menge von Elementen Operationen auf den Elementen (Konstruktoren, Selektoren, Typprädikate) Eigenschaften abgeleitet Jetzt: Abstrakte Datentypen (ADT)

Mehr

2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.

2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert. 2.5 Listen Listen werden mithilfe von [] und :: konstruiert. Kurzschreibweise: [42; 0; 16] # let mt = [];; val mt : a list = [] # let l1 = 1::mt;; val l1 : int list = [1] # let l = [1;2;3];; val l : int

Mehr

Datenstruktur Baum und Rekursion Software Entwicklung 1

Datenstruktur Baum und Rekursion Software Entwicklung 1 Datenstruktur Baum und Rekursion Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller 1 Datenstruktur Baum Bäume gehören zu den wichtigsten in der Informatik auftretenden Datenstrukturen.

Mehr

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 4 (Kapitel 4)

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 4 (Kapitel 4) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 4 (Kapitel 4) Hinweis: Dieses Übungsblatt enthält

Mehr

Grundlagen der Programmierung 3 A

Grundlagen der Programmierung 3 A Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2016 Haskell, Typen, und Typberechnung Ziele: Haskells Typisierung Typisierungs-Regeln

Mehr

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II)

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II) Hinweis: Dieses

Mehr

Übungsblatt 6: Softwareentwicklung I (WS 2006/07)

Übungsblatt 6: Softwareentwicklung I (WS 2006/07) Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. J.O. Blech Dipl.-Inform. M.J. Gawkowski Dipl.-Inform. N. Rauch Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik Übungsblatt 6:

Mehr

Programmierung und Modellierung

Programmierung und Modellierung Programmierung und Modellierung Terme, Suchbäume und Pattern Matching Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 7. Binärer Suchbaum 8. Anwendung:

Mehr

Verkettete Datenstrukturen: Bäume

Verkettete Datenstrukturen: Bäume Verkettete Datenstrukturen: Bäume 1 Graphen Gerichteter Graph: Menge von Knoten (= Elementen) + Menge von Kanten. Kante: Verbindung zwischen zwei Knoten k 1 k 2 = Paar von Knoten (k 1, k 2 ). Menge aller

Mehr

Programmieren in Haskell Programmiermethodik

Programmieren in Haskell Programmiermethodik Programmieren in Haskell Programmiermethodik Peter Steffen Universität Bielefeld Technische Fakultät 12.01.2011 1 Programmieren in Haskell Bisherige Themen Was soll wiederholt werden? Bedienung von hugs

Mehr

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 13 (Queues, Binary Search)

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 13 (Queues, Binary Search) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 13 (Queues, Binary Search)

Mehr

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

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell): Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel

Mehr

Tag 7. Pattern Matching und eigene Datentypen

Tag 7. Pattern Matching und eigene Datentypen Tag 7 Pattern Matching und eigene Datentypen Heute werden wir eine Technik kennenlernen, die dafür sorgt, daß wir sehr viel übersichtlichere und kürzere Programme schreiben können. Als Überleitung auf

Mehr

Grundlagen der Programmierung 3 A

Grundlagen der Programmierung 3 A Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Haskell, Typen, und Typberechnung Ziele: Haskells Typisierung Typisierungs-Regeln

Mehr

Programmierung und Modellierung

Programmierung und Modellierung Programmierung und Modellierung Funktionen höherer Ordnung Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 6 Funktionen höherer Ordnung 1. Funktionen als Parameter und Wert von

Mehr

Klausur Programmierung WS 2002/03

Klausur Programmierung WS 2002/03 Klausur Programmierung WS 2002/03 Prof. Dr. Gert Smolka, Dipl. Inf. Thorsten Brunklaus 14. Dezember 2002 Leo Schlau 45 Vor- und Nachname Sitz-Nr. 4711 007 Matrikelnummer Code Bitte öffnen Sie das Klausurheft

Mehr

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung Gliederung n Teil I: Einleitung und Grundbegriffe l 1. Organisatorisches l 2. Grundlagen von Programmiersprachen n Teil II: Imperative und objektorientierte Programmierung l 1. Grundelemente der Programmierung

Mehr

Lösungshinweise/-vorschläge zur Altklausur Abschlussklausur 06/07

Lösungshinweise/-vorschläge zur Altklausur Abschlussklausur 06/07 Lösungshinweise/-vorschläge zur Altklausur Abschlussklausur 06/07 Dies sind die Lösungsvorschläge zu einer Altklausur, deren Aufgabenstellung an die Inhalte der Vorlesung Grundlagen der Programmierung

Mehr

3 Einführung in ML. 3.1 Überblick. 3.2 Elementare Datentypen und Funktionen Bezeichner Elementare Datentypen

3 Einführung in ML. 3.1 Überblick. 3.2 Elementare Datentypen und Funktionen Bezeichner Elementare Datentypen 3 Einführung in ML 3.1 Überblick ML (Abk. für Meta Language) ist eine funktionale Programmiersprache, die Ende der 70er Jahre an der University of Edinburgh entwickelt und 1987 standardisiert wurde. Wir

Mehr

Strukturelle Rekursion und Induktion

Strukturelle Rekursion und Induktion Kapitel 2 Strukturelle Rekursion und Induktion Rekursion ist eine konstruktive Technik für die Beschreibung unendlicher Mengen (und damit insbesondere für die Beschreibung unendliche Funktionen). Induktion

Mehr

Kapitel 7: Benutzerdefinierte Datentypen

Kapitel 7: Benutzerdefinierte Datentypen Kapitel 7: Benutzerdefinierte Datentypen Andreas Abel LFE Theoretische Informatik Institut für Informatik Ludwig-Maximilians-Universität München 10. Juni 2011 Quelle: Martin Wirsing, Benutzerdefinierte

Mehr

Probeklausur Software-Entwicklung I

Probeklausur Software-Entwicklung I Prof. Dr. A. Poetzsch-Heter Dipl.-Inform. J. O. Blech Dipl.-Inform. M. J. Gawkowski Dipl.-Inform. N. Rauch Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik Probeklausur Software-Entwicklung

Mehr

9 Algebraische Datentypen

9 Algebraische Datentypen 9 Algebraische Datentypen Dieses Kapitel erweitert Haskells Typsystem, das neben Basistypen (Integer, Float, Char, Bool,... ) und Typkonstruktoren ([ ] und ( )) auch algebraische Datentypen kennt. Ganz

Mehr

Workshop Einführung in die Sprache Haskell

Workshop Einführung in die Sprache Haskell Workshop Einführung in die Sprache Haskell Nils Rexin, Marcellus Siegburg und Alexander Bau Fakultät für Informatik, Mathematik und Naturwissenschaften Hochschule für Technik, Wirtschaft und Kultur Leipzig

Mehr

10 Abstrakte Datentypen

10 Abstrakte Datentypen 10 Abstrakte Datentypen abstrakte Datentypen generische Implementierung datengesteuerte Programmierung Operationstabelle 10.1 Abstrakte Datentypen Bisher: Konkrete Datentypen Menge von Elementen Operationen

Mehr

1. Probeklausur Programmierung 1 (WS 2010/2011)

1. Probeklausur Programmierung 1 (WS 2010/2011) 1. Probeklausur Programmierung 1 (WS 2010/2011) Team der Tutoren 11. Dezember 2010 Name Sitzplatz Matrikelnummer Bitte öffnen Sie das Klausurheft erst dann, wenn Sie dazu aufgefordert werden. Sie können

Mehr

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund EINI LW/WiMa Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 12/13 Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund lars.hildebrand@tu-dortmund.de

Mehr

Vorsicht bei redundanten und unvollständigen Matches!

Vorsicht bei redundanten und unvollständigen Matches! Vorsicht bei redundanten und unvollständigen Matches! # let n = 7;; val n : int = 7 # match n with 0 -> "null";; Warning: this pattern-matching is not exhaustive. Here is an example of a value that is

Mehr

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12 EINI LW Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 11/12 Fakultät für Informatik Technische Universität Dortmund lars.hildebrand@udo.edu http://ls1-www.cs.uni-dortmund.de

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie Rev. 2749 1 [28] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 04.11.2014: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2014/15 2 [28] Fahrplan Teil

Mehr

Fahrplan. Algebraische Datentypen. Inhalt. Der Allgemeine Fall: Algebraische Datentypen. Algebraische Datentypen: Nomenklatur

Fahrplan. Algebraische Datentypen. Inhalt. Der Allgemeine Fall: Algebraische Datentypen. Algebraische Datentypen: Nomenklatur Fahrplan Teil I: Funktionale Programmierung im Kleinen Praktische Informatik 3: Funktionale Programmierung Vorlesung 3 vom 01112016: Algebraische Datentypen Christoph Lüth Universität Bremen Wintersemester

Mehr

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2008/09 Einführung in die Informatik 2 Klausur Prof. Dr. Helmut Seidl, T. M. Gawlitza, S. Pott,

Mehr

3. Funktionales Programmieren

3. Funktionales Programmieren 3. Funktionales Programmieren Grundkonzepte funktionaler Programmierung Algorithmen auf Listen und Bäumen Abstraktion mittels Polymorphie und Funktionen höherer Ordnung Semantik, Testen und Verifikation

Mehr

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17 EINI LW/WiMa Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17 Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund lars.hildebrand@tu-dortmund.de

Mehr

Kapitel 12: Induktive

Kapitel 12: Induktive Kapitel 12: Induktive Datenstrukturen Felix Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung Praktische Informatik I im Herbstsemester 2009 Folien nach einer Vorlage von H.-Peter

Mehr

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 7 (Kapitel 7)

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 7 (Kapitel 7) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 7 (Kapitel 7) Hinweis: Dieses Übungsblatt enthält

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Fallstudie: Arithmetische Ausdrücke Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick

Mehr

Einführung in die Informatik 2 9. Übung

Einführung in die Informatik 2 9. Übung Technische Universität München WS 2012/13 Institut für Informatik 11.11.2012 Prof. Tobias Nipkow, Ph.D. Abgabe: 18.12.2012, 15:30 Lars Noschinski, Dr. Jasmin Blanchette, Dmitriy Traytel Einführung in die

Mehr

Frage, Fragen und nochmals Fragen

Frage, Fragen und nochmals Fragen Frage, Fragen und nochmals Fragen Berthold Hoffmann Universität Bremen and DFKI Bremen hof@informatik.uni-bremen.de In diesem Text stehen einige Fragen, die man sich zu den Folien der Veranstaltung Funktionales

Mehr

11 Fallstudie: Reguläre Ausdrücke

11 Fallstudie: Reguläre Ausdrücke 11 Fallstudie: Reguläre Ausdrücke Mit den bisher eingeführten Sprachelementen von Haskell lassen sich bereits substantielle Projekte realisieren. Dieses Kapitel 1 beschreibt einen algebraischen Datentyp

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Funktionale Programmierung Grundlegende Datentypen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 14.11.2017 15:37 Inhaltsverzeichnis Typen........................................

Mehr

Programmierung WS 2002 / 03: Musterlösung zum 12. Übungsblatt

Programmierung WS 2002 / 03: Musterlösung zum 12. Übungsblatt U N S A R I V E R S A V I E I T A S N I S S Programmierung WS 2002 / 03: Musterlösung zum 12. Übungsblatt Prof. Dr. Gert Smolka, Dipl.-Inform. Thorsten Brunklaus Aufgabe 12.1: Syntaxbäume (10 = 2 + 2 +

Mehr

Einführung in die funktionale Programmierung

Einführung in die funktionale Programmierung Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 26. Oktober 2006 Haskell - Einführung Syntax Typen Auswertung Programmierung

Mehr

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter Fallstudie: Arithmetische Ausdrücke AG Softech FB Informatik TU Kaiserslautern Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 3 vom : Algebraische Datentypen

Praktische Informatik 3: Funktionale Programmierung Vorlesung 3 vom : Algebraische Datentypen 16:01:59 2017-01-17 1 [35] Praktische Informatik 3: Funktionale Programmierung Vorlesung 3 vom 01.11.2016: Algebraische Datentypen Christoph Lüth Universität Bremen Wintersemester 2016/17 PI3 WS 16/17

Mehr

Einführung in die Informatik 2

Einführung in die Informatik 2 Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Lars Noschinski, Dr. Jasmin Blanchette, Dmitriy Traytel Wintersemester 2012/13 Lösungsblatt Endklausur 9. Februar 2013

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Grundlegende Datentypen Funktionale Programmierung Prof. Dr. Oliver Braun Letzte Änderung: 22.10.2018 10:53 Grundlegende Datentypen 1/21 Typen in Haskell ist alles streng typisiert Haskell verfügt über

Mehr

3. Funktionales Programmieren 3.2 Algorithmen auf Listen und Bäumen. Heapsort verfeinert die Idee des Sortierens durch Auswahl:

3. Funktionales Programmieren 3.2 Algorithmen auf Listen und Bäumen. Heapsort verfeinert die Idee des Sortierens durch Auswahl: Heapsort 3. Funktionales Programmieren 3.2 Algorithmen auf Listen und Bäumen Heapsort verfeinert die Idee des Sortierens durch Auswahl: Minimum bzw. Maximum wird nicht durch lineare Suche gefunden, sondern

Mehr

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 1 (Kapitel 1)

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 1 (Kapitel 1) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 1 (Kapitel 1) Hinweis: Dieses Übungsblatt enthält

Mehr

Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl

Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl Name: Vorname: Matr. Nr.: Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl Zwischenklausur zu Einführung in die Informatik I Hinweis: In dieser Zwischenklausur

Mehr

Prüfung Funktionale Programmierung

Prüfung Funktionale Programmierung Hochschule für angewandte Wissenschaften München Fakultät für Informatik und Mathematik Studiengruppe IF, IB, IC Sommersemester 2015 Prüfung Funktionale Programmierung Datum : 23.07.2015, 10:30 Uhr Bearbeitungszeit

Mehr

4.1 Bäume, Datenstrukturen und Algorithmen. Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als

4.1 Bäume, Datenstrukturen und Algorithmen. Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als Kapitel 4 Bäume 4.1 Bäume, Datenstrukturen und Algorithmen Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als eine Menge von Knoten und eine Menge von zugehörigen

Mehr

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18

Mehr

Funktionales Programmieren

Funktionales Programmieren 3. Funktionales Programmieren 3.0 Kapitel 3 Funktionales Programmieren Arnd Poetzsch-Heffter TU Kaiserslautern 157 3. Funktionales Programmieren 3.0 Übersicht 3. Funktionales Programmieren Grundkonzepte

Mehr

26 Hierarchisch strukturierte Daten

26 Hierarchisch strukturierte Daten Algorithmik II Peter Wilke Sommersemester 2005 Teil III Funktionale Programmierung 26 Hierarchisch strukturierte Daten Peter Wilke Algorithmik II Sommersemester 2005 1 Peter Wilke Algorithmik II Sommersemester

Mehr

Allgemeine Hinweise:

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK WS 11/12 Einführung in die Informatik 2 Klausur Prof. Dr. Andrey Rybalchenko, M.Sc. Ruslán Ledesma Garza 11.02.2011 Name Vorname Studiengang Matrikelnummer

Mehr

Binärbäume: Beispiel

Binärbäume: Beispiel Binärbäume Als Beispiel für eine interessantere dynamische Datenstruktur sehen wir uns jetzt Binärbäume an Ein Binärbaum wird rekursiv definiert: Er ist leer oder besteht aus einem Knoten (die Wurzel des

Mehr

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Sommersemester

Mehr

5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!

5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu! 5.4 Arrays Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu! Feld: Index: 17 3-2 9 0 1 0 1 2 3 4 5 Harald Räcke 114/656

Mehr

1. Probeklausur (Lösung) zu Programmierung 1 (WS 07/08)

1. Probeklausur (Lösung) zu Programmierung 1 (WS 07/08) Fachschaft Informatikstudiengänge Fachrichtung 6.2 Informatik Das Team der Bremser 1. Probeklausur (Lösung) zu Programmierung 1 (WS 07/08) http://fsinfo.cs.uni-sb.de Name Matrikelnummer Bitte öffnen Sie

Mehr

Funktionale Programmierung Grundlegende Datentypen

Funktionale Programmierung Grundlegende Datentypen Grundlegende Datentypen Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 06.11.2017 16:45 Inhaltsverzeichnis Typen........................................

Mehr

Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 12 (Kapitel 13)

Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 12 (Kapitel 13) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 12 (Kapitel 13)

Mehr

Definition: (Kette, noethersche Ordnung) Definition: (Kette, noethersche Ordnung) (2) Lemma: Terminierungskriterium:

Definition: (Kette, noethersche Ordnung) Definition: (Kette, noethersche Ordnung) (2) Lemma: Terminierungskriterium: Definition: (Kette, noethersche Ordnung) Definition: (Kette, noethersche Ordnung) (2) Sei (M, ) eine Ordnung. Eine Folge ϕ : N M heißt eine (abzählbar unendliche) aufsteigende Kette, wenn für alle i N

Mehr

1 Der Baum. Informatik I: Einführung in die Programmierung 11. Bäume. Bäume in der Informatik. Bäume in der Informatik - Definition.

1 Der Baum. Informatik I: Einführung in die Programmierung 11. Bäume. Bäume in der Informatik. Bäume in der Informatik - Definition. 1 Informatik I: Einführung in die Programmierung 11. Bäume e e Albert-Ludwigs-Universität Freiburg Bernhard Nebel 13. November 2015 13. November 2015 B. Nebel Info I 3 / 33 Bäume in der Informatik Bäume

Mehr

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Informatik Vorlesung 08 Pointer (Dynamisch) 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Pointer (Zeiger) Dynam. Speicher Bisher: Speicherbedarf muss

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Grundlegende Datentypen (Funktionale Programmierung) Prof. Dr. Oliver Braun Letzte Änderung: 18.03.2018 21:08 Grundlegende Datentypen 1/16 Typen in Haskell ist alles streng typisiert Haskell verfügt über

Mehr

mathematik und informatik

mathematik und informatik Prof. Dr. Martin Erwig Kurs 01852 Fortgeschrittene Konzepte funktionaler Programmierung LESEPROBE mathematik und informatik Das Werk ist urheberrechtlich geschützt. Die dadurch begründeten Rechte, insbesondere

Mehr

Kapitel 6. Konstruktortypen und Ausnahmen. 6.1 Varianten und Konstruktoren

Kapitel 6. Konstruktortypen und Ausnahmen. 6.1 Varianten und Konstruktoren Kapitel 6 Konstruktortypen und Ausnahmen Wir lernen jetzt, wie man mithilfe von Konstruktoren neue Typen deklariert. Mit Konstruktortypen lassen sich Mengen von geordneten Bäumen beschreiben. Außerdem

Mehr

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1 Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable 1 Kapitel 3 Grunddatentypen, Ausdrücke und Variable 2 Eine Datenstruktur besteht aus Grunddatentypen in Java einer Menge von Daten (Werten) charakteristischen Operationen Datenstrukturen werden mit einem

Mehr

Funktionale Programmierung mit ML

Funktionale Programmierung mit ML Funktionale Programmierung mit ML Logische und funktionale Programmierung - Universität Potsdam - M. Thomas - Funkt. Programmierung mit ML - X.1 Wichtigsten Eigenschaften von SML funktionale Programmiersprache

Mehr

Bemerkung: Heapsort. Begriffsklärung: (zu Bäumen) Begriffsklärung: (zu Bäumen) (2) Heapsort verfeinert die Idee des Sortierens durch Auswahl:

Bemerkung: Heapsort. Begriffsklärung: (zu Bäumen) Begriffsklärung: (zu Bäumen) (2) Heapsort verfeinert die Idee des Sortierens durch Auswahl: Heapsort Bemerkung: Heapsort verfeinert die Idee des Sortierens durch Auswahl: Minimum bzw. Maximum wird nicht durch lineare Suche gefunden, sondern mit logarithmischem Aufwand durch Verwendung einer besonderen

Mehr

Prüfung Funktionale Programmierung

Prüfung Funktionale Programmierung Hochschule für angewandte Wissenschaften München Fakultät für Informatik und Mathematik Studiengruppe IF, IB, IC Sommersemester 2014 Prüfung Funktionale Programmierung Datum : 16.07.2014, 12:30 Uhr Bearbeitungszeit

Mehr

Polymorphie und Funktionen höherer Ordnung

Polymorphie und Funktionen höherer Ordnung Abschnitt 3.3 3. Funktionales Programmieren 3.3 Polymorphie und Funktionen höherer Ordnung Polymorphie und Funktionen höherer Ordnung Arnd Poetzsch-Heffter TU Kaiserslautern 405 3. Funktionales Programmieren

Mehr

Lösungen zum Übungsblatt 3: Softwareentwicklung I (WS 2006/07)

Lösungen zum Übungsblatt 3: Softwareentwicklung I (WS 2006/07) Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. J.O. Blech Dipl.-Inform. M.J. Gawkowski Dipl.-Inform. N. Rauch Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungen zum Übungsblatt

Mehr

Paradigmen der Programmierung

Paradigmen der Programmierung SS 11 Prüfungsklausur 25.07.2011 Aufgabe 5 (6+9 = 15 Punkte) a) Bestimmen Sie jeweils den Typ der folgenden Haskell-Ausdrücke: ( 1, 2 :"3", 4 < 5) :: (Char, String, Bool) [(last, tail), (head, take 5)]

Mehr

Fallstudie: Nim Spiel

Fallstudie: Nim Spiel Fallstudie: Nim Spiel Angeblich chinesischen Ursprungs (Jianshizi) Interessant für Spieltheorie: vollständig analysierbar Frühzeitig computerisiert 1939 Nimatron (Weltausstellung New York) 1951 Nimrod

Mehr

Kapitel 6: Typprüfung

Kapitel 6: Typprüfung Ludwig Maximilians Universität München Institut für Informatik Lehr- und Forschungseinheit für Datenbanksysteme Skript zur Vorlesung Informatik I Wintersemester 2006 Vorlesung: Prof. Dr. Christian Böhm

Mehr

ALP I. Funktionale Programmierung

ALP I. Funktionale Programmierung ALP I Funktionale Programmierung Zusammengesetzte Datentypen in Haskell WS 2012/2013 Zusammengesetzte Datentypen Tupel List String Zusammengesetzte Datentypen Tupel-Datentyp Ein Tupel ist eine Ansammlung

Mehr