Reelle Zahlen. Einzelzeichen. Bereiche. Aufzählungen. direkt zusammengesetzte Datentypen. einfache Datentypen: Zusammenfassung. kartesisches Produkt

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

Mengen. Eigenschaften. Spezielle Mengen (1) Prominente Mengen. ! Mengenzugehörigkeit

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

Einführung in die Informatik 2

Einstieg in die Informatik mit Java

Zahlen in Haskell Kapitel 3

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

Programmieren in Haskell

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Elementare Konzepte von

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

Programmieren in Haskell

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

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Brückenkurs Mathematik 2015

In diesem Kapitel wiederholen wir Begriffe und Notationen für grundlegende mathematische

Verkettete Datenstrukturen: Bäume

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

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

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Crashkurs Haskell Mentoring WiSe 2016/17. Anja Wolffgramm Freie Universität Berlin

Frage, Fragen und nochmals Fragen

Vorsicht bei redundanten und unvollständigen Matches!

Werkzeuge zur Programmentwicklung

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Diskrete Strukturen Kapitel 2: Grundlagen (Relationen)

2.5 Primitive Datentypen

Mengen, Funktionen und Logik

Programmiersprachen. Organisation und Einführung. Berthold Hoffmann. Studiengang Informatik Universität Bremen

Funktionale Programmierung mit Haskell

2. Datentypen und Deklarationen

Prädikate sind Funktionen. Prädikatenlogik. Quantoren. n stellige Prädikate. n stellige Prädikate:

Modul 122 VBA Scribt.docx

Funktionale Programmierung

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

C für Java-Programmierer

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

Programmieren in Haskell Einführung

Eigenschaften strukturierter Datentypen

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Kapitel 1. Grundlagen Mengen

Strukturelle Rekursion und Induktion

Mathematik für Informatiker I

2 Modellierung mit Wertebereichen

Primitive Datentypen und Felder (Arrays)

Formale Grundlagen 2008W. Vorlesung im 2008S Institut für Algebra Johannes Kepler Universität Linz

Typdeklarationen. Es gibt in Haskell bereits primitive Typen:

Kapitel 2 Mathematische Grundlagen

Lineare Algebra 1. Detlev W. Hoffmann. WS 2013/14, TU Dortmund

Graphentheorie 1. Diskrete Strukturen. Sommersemester Uta Priss ZeLL, Ostfalia. Hausaufgaben Graph-Äquivalenz SetlX

JAVA-Datentypen und deren Wertebereich

Einführung in die Programmierung mit VBA

Inhaltsverzeichnis. Einführende Bemerkungen 11. Das Fach Informatik 11 Zielsetzung der Vorlesung Grundbegriffe

Tag 7. Pattern Matching und eigene Datentypen

Mathematik für Ökonomen 1

Logik, Mengen und Abbildungen

Diskrete Strukturen Kapitel 2: Grundlagen (Beweise)

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Kapitel 1. Grundlagen

Funktionale Programmierung mit Haskell. Jan Hermanns

Vorsemesterkurs Informatik

6.1 Natürliche Zahlen 6.2 Induktion und Rekursion 6.3 Ganze, rationale, reelle und komplexe Zahlen 6.4 Darstellung von Zahlen

Mengenlehre. Jörg Witte

Die Programmiersprache C Eine Einführung

Einführung in die Computerorientierte Mathematik

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

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Grundbegriffe der Informatik

Eine Menge A ist die Zusammenfassung gleichartiger Elemente zu einer Gesamtheit. Eine Menge kann definiert werden durch

Grundlagen der Mathematik

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Algorithmen & Datenstrukturen

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

RO-Tutorien 3 / 6 / 12

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke

3. Relationen Erläuterungen und Schreibweisen

Einführung in die Java- Programmierung

Grundlagen der Programmierung 2 (1.C)

Dr. Monika Meiler. Inhalt

1. Erläutern Sie die Aufgaben von Datentypen in der imperativen Programmierung.

Welche Informatik-Kenntnisse bringen Sie mit?

2 Mengen und Abbildungen

26 Hierarchisch strukturierte Daten

Programmieren in Haskell Programmiermethodik

Übersicht. Vorstellung des OO-Paradigmas

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Algorithmen und Datenstrukturen 1

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

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

WS 2011/2012. Georg Sauthoff 1. October 18, 2011

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

Einführung in die Mengenlehre

Prof. Dr. Uwe Schmidt. 12. August Aufgaben zur Klausur Softwaredesign im SS 2014 (BInf v310, BMInf v300, BWInf v310, BWInf- 23)

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Programmiersprachen 2. Überleitung. Paradigmen 1. Imperatives Programmieren. Konzepte. Paradigmen. Beispiel: Funktionen

VBA-Programmierung: Zusammenfassung

Frage: Gibt es Dinge die wir nur in anderen Sprachen berechnen können? Was kann man wirklich mit dem λ-kalkül ausdrücken?

Transkript:

Werte Studiengang Informatik Universität Bremen Sommersemester 2006 (Vorlesung am 8. Mai 2006) Werte / Daten einfach direkt zusammengesetzt rekursiv zusammengesetzt Einfache Datentypen eingabaut Wahrheitswerte ganze Zahlen vordefiniert Zeichen Gleitkommazahlen benutzerdefiniert Aufzählungen Bereiche je Sprache hat einen universellen Wertebereich W, das ist die Menge aller Werte, mit denen gerechnet werden kann Wwird anhand einer Menge T von Datentypen klassifiziert Ein Datentyp (kurz Typ) t T besteht aus einer Wertemenge W t W endlich vielen auf W t Es gibt verschiedene Arten von Typen einfach direkt zusammengesetzt rekursiv zusammengesetzt Typen können unterschiedlichen Statur haben benutzerdefiniert vordefiniert (in einer Bibliothek) eingebaut (semantisch unverzichtbar, syntaktisch speziell behandelt) Wahrheitswerte Wertemenge B = {false, true} mit logischen Negation : B B Konjunktion : B B B Disjunktion : B B B und weiteren abgeleiteten Implikation Äquivalenz... semantisch eingebaut Auswahl (if) syntaktisch: wie ein vordefinierter Aufzählungstyp (siehe unten) Wahrheitswerte: Besonderheiten Ganze Zahlen Abkürzende Auswertung (Ada, Haskell) x y if x then y else false x y if x then true else y Ungewöhnliche Operationsnamen (Haskell) Bool ist ein geordneter Typ ( Instanz der Klasse Eq ) Implikation als kleiner gleich : x y x y Äquivalenz als gleich : x y x = y Wahrheitswerte sind ganze Zahlen (C, C++) n = 0 false, n 0 true Wertemenge Z wird meist nur mit begrenzter Genauigkeit dargestellt: Z = {minint,...,maxint} Typischerweise gilt minint = 2 31 und maxint = 2 31 1 mit Zählen succ, pred : Z Z Arithmetik +,,, mod : Z Z Z Vergleiche =,, <,,, >: Z Z B Beliebig genaue ganze Zahlen (z. B. in Haskell) werden wie Zahlen zur Basis 2 32 dargestellt. semantisch eingebaut Auswahl (case, array) syntaktisch: eingebaute Schreibweise für Werte 42

Einzelzeichen Reelle Zahlen Wertemenge C wird entweder mit Ascii oder Unicode kodiert. mit Zählen succ, pred : C C Umwandlung von und in Zahlen ord: C Z, chr: Z C Vergleiche =,, <,,, >: C C B semantisch: einvordefinierter Aufzählungstyp (siehe unten) In manchen Sprachen gilt C Z. syntaktisch: eingebaute Schreibweise für Werte % Wertemenge R kann nur lückenhaft und mit begrenzter Genauigkeit dargestellt werden mit Arithmetik +,,, /, : R R R Vergleiche =,, <,,, >: R R B Logarithmen-, Winkelfunktionen usw. Zeichenketten sind meist zusammengesetzte Typen (siehe unten) Aufzählungen Bereiche Eine Aufzählung definiert eine Wertemenge a = {c 1,...,c k } mit Zählen succ, pred : A A Vergleiche =,, <,,, >: A A B Intern: W a Z und c i = i (oder c i = i 1), 1 i k type Color = { Red, Green, Blue } Ein Bereichstyp b = trangeu...o definiert eine zusammenhängende Teilmenge eines einfachen Typs WW b = {w W t u w o} erbt die des Grundtyps t Bereichsüberschreitung müssen geprüft werden subtype SmallFloat = Float range -1.0.. +1.0; subtype Nat = Integer range 0.. Integer Last; subtype Pos = Nat range 1.. Integer Last; subtype LC Letter = Char range a.. z ; subtype Cool = Color range Green.. Blue; einfache Datentypen: Zusammenfassung direkt zusammengesetzte Datentypen Viele einfache Datentypen sind vordefiniert Einige sind eingebaut: Sie werden für die Definition bestimmter Konzepte unbedingt gebraucht B für bedingte Ausdrücke und Befehle Z für Feldindices und numerische Auswahl Die Wertemenge ist meistens eingeschränkt Die Kardinalität (#) solcher Typen ist dann endlich Zahlentypen können verschieden große Teilmengen haben Java: float double Darstellung nach internationalen Standards (ieee für Zahlen, Unicode für Zeichen) einfache Datentypen sind Abstraktionen der Datentypen, die die Plattform unterstützt Produkt konkret Verbund (record, struct) Tupel Summe Funktionsraum konkret Felder (array) Funktionsprozeduren (function) Potenzmenge kartesisches Produkt Summe (disjunkte Vereinigung) Definition: p = s t Wertemenge W p = {(x, y) x W s, y W t } Kardinalität #(p) = #(p) #(t) Selektion sel p 1 : W p W s, sel p 2 : W p W t n-tupel p = t 1 t n = n 1 t i (k 2) homogene n-tupel t n = n 1 t (n 2) Sonderfall Nulltupel t 0 = {()} mit #(t 0 ) = 1 Nützlicher als man denkt: Unit (Java: void) Definition: v = s + t Wertemenmenge W v = {(0, x) x W s } {(1, x) x W t } Kardinalität #(v) = #(s) + #(t) Variantenabfrage iss v : v B, ist v : v B Projektion proj v 1 : W v W s, proj v 2 : W v W t

Potenzmenge Relation und Funktion m = (t) Wertemenmenge W m = {s s W t } Kardinalität #(m) = 2 #(t) Elementabfrage ( ): W t W m B, Mengenoperationen ( ), ( ), (\): W m W m W m In wenigen Sprachen definiert Pascal: Potenzmengen über einfachen Basistypen b mit #(b) 2 8 = 256 Lassen sich als Bitketten der Länge 2 8 darstellen (8 Worte) Für allgemeinere Basismengen gibt es keine kanonische Darstellung, die alle effizient implementiert Eine Teilmenge R A B heißt (zweistellige) Relation Statt (x, y) A schreiben wir oft A(x, y) Eine zweistellige Relation R ist eine Abbildung wenn gilt: x A, y, y B : (x, y) R (x, y ) R y = y (rechtseindeutig) x W S y W T : (x, y) M (linkstotal) Dann schreiben wir R : A B Statt (x, y) R schreiben wir y = R x (Funktionsanwendung) Funktionsraum Zusammengesetzte Datentypen Definition: F = s t Wertemenmenge W F = {f W s t f : s t} Kardinalität #(F) = #(t) #(s) Funktionsanwendung vom Typ F s t ausgedrückt durch Hintereinanderschreiben (juxtaposition): f a (a W F, a W s ) mehrere Parameter ein Produktparameter f : t 1 t n t 0 Auftreten in Felder (array) tabellieren Funktionen mit endlichem Wertebereich Funktionsprozeduren implementieren Funktionen mit einem Algorithmus Andere Namen Datenstrukturen Typkonstruktoren (Typkonstruktions-Funktionen) Datenstrukturen können beliebig geschachtelt werden mit Typausdrücken T über Typnamen X: Jeder Typname ist ein Typausdruck: x X x T für alle s, t T gilt s t, s + t, s t T Datenstrukturen können benannt werden: x = t (x X, t T ) Frage: Wie können Listen und Bäume definiert werden? Antwort: rekursiv! Isomorphie von Mengen Isomorphie von Produkten und Summen Definition (Isomorphie) Mengen A und B heißen isomorph, geschrieben A = B, wenn es eine bijektive Funktion f : A B gibt. Fakt ( = ist eine Äquivalenzrelation) A = A reflexiv A = B B = A kommutativ A = B B = C A = C transitiv Definition (Isomorphiklassen) [A] = = {B A = B}. Elemente von [A] = werden nicht unterschieden. Definition (Null und Eins) 0 = {} ist die (eindeutige) leere Menge. 1 ist die Isomorphieklasse aller einelementigen Mengen. Fakt (Isomorphie von Produkten und Summen) A B = B A kommutativ A (B C) = (A B) C assoziatitiv 0 A = neutral A + B = B + A kommutativ A + (B + C) = (A + B) + C assoziatitiv 1 + A = A 1 neutral 0 + A = 0 0 absorbiert Isomorphie von Funktionsräumen Fakt (Produkte und Summen) (A B) + (A C) = A (B + C) distributiv Fakt (Funktionsräume) (A B) C = A B C Curry (A + B) C = (A C) (B C) Rekursive Typdefinitionen Definition: x = t wobei x in t auftritt typisch : t ist eine Summe von rekursiven und nicht rekursiven Typen Die Wertemenge W x ist eine Lösung der Gleichung x = t Typgleichungen haben im Allgemeinen mehrere Lösungen! kleinster Fixpunkt: Menge aller endlichen Werte rekursives Bestimmen des kleinsten Fixpunktes: W x = W 0 i 0 Wi x = {} x W i+1 wobei t[x/w] x = W t[x/wi] durch Ersetzen von x durch W in t entsteht Kardinalität rekursiver Typen ist unendlich

Listen Listen Beispiel (Zahlen-Listen) IntList = Unit + Int IntList Wertemenge: L 0 = {} L 1 = Unit + Int L 0 = {()} L 2 = Unit + Int L 1 = {(n, ()) n W Int } L 3 = Unit + Int L 2 = {(n, (m, ())) n, m W Int }... Endliche Listen von Zahlen Beispiel (Bäume) IntTree = Unit + IntTree Int IntTree Wertemenge: T 0 = {} T 1 = Unit + IntTree {} IntTree = {()} T 2 = Unit + T 1 Int T 1 = {(n, ()) n W Int } T 3 = Unit + Int L 2 = {(n, (m, ())) n, m W Int }... Endliche Bäume mit Zahlen-markierten Knoten Andere rekursive Typen Zeichenketten Beispiele Zyklische Listen Blatt-verkettete Bäume Unendliche Werte mit endlich vielen verschiedenen Komponenten rationale Listen bzw. Bäume dargestellt mit Zeigern (siehe Kapitel Speicher) abstrakt: als Graphen Ein (meistens) vordefinierter Datentyp Zeichenketten können dargestellt werden als einfacher Datentyp (string in Ml) Feld von Einzelzeichen ( Pascal) Liste von Einzelzeichen ( Haskell) Welche Vor- und Nachteile haben diese Lösungen? Ausdruck Literal und Aggregat Variable, Funktionsanwendung, bedingter Ausdruck Die Menge A aller Ausdrücke enthält: Literale (Wert-Notationen) einfacher vordefinierter Datentypen Aggregate (Wertkonstruktoren) zusammengesetzter Datentypen Namen von Werten (Konstante, Variable) Anwendungen von Funktionen auf Argumente Ausdrücke sind getypt: A t ist die Menge aller Ausdrücke vom Typ t T Literal und Aggregat Variable, Funktionsanwendung, bedingter Ausdruck Literal: Notation für Werte einfacher Typen Zahlen: 42 A Int und 0.31415 +1 A Float Zeichen und Zeichenketten: % A Char und HelloWorld! A String Aggregat: Notation für Werte zusammengesetzter Typen (Wertkonstruktor) Wenn e A s und e A t, dann gilt (e, e ) A s t Wenn e A s, dann gilt (0, e ) A s+t und wenn e A t, dann gilt (1, e ) A s+t Wenn x X s und e A t, dann gilt λx.e A s t (X s ist die Menge der Variablen vom Typ s) Sei C der Kontext eines Ausdrucks, mit C = (C t : X t W t ) t T. Dann gilt für jede Variable x X t : x : A t Wenn f A s t und a A s, dann ist (f a) A t Infix- sind eine spezielle Schreibweise für Funktionen e e ( ) e e Wenn c A Bool und e, e A t, dann ist if c then e else e A t Weshalb ist if keine Funktion? Antwort: Weil nur das erste Argument immer ausgewertet wird

vereinfachende Annahmen Die Wertemengen der einfachen Datentypen sind disjunkt Auch W Int W Float = {} (Umwandlung von ganzen in Gleitkommazahlen ist eine Operation) jeder Wert gehört zu genau einem Typ Alle Typen sind explizit benannt Monomorphie: jeder Name hat höchstens einen Typ Typisierung Typisierung in konkreten Sprachen statisch Jeder Name x wird ein Typ t zugeordnet (und weitere Eigenschaften). Dann können x nur Werte v W t zugeordnet werden. Ausdrücke werden vor der Ausführung auf Typfehler überprüft. dynamisch Im Programm wird Namen kein Typ t zugeordnet Dann können ihnen nacheinander Werte verschiedenen Typs zugeordnet werden. Ausdrücke werden während der Ausführung auf Typfehler überprüft. gar keine Überprüfung......geht nicht, wegen wie + und < Alle Referenzsprachen (außer Prolog) sind statisch getypt. Aber: In jedem hinreichend mächtigen System von Typregeln gibt es Regeln, die nur dynamisch überprüft werden können. x W Nat? Beispiel (Java) Jede Variable vom Typ t kann auch Werte eines Untertyps u enthalten. Typäquivalenz strukturelle Äquivalenz Zwei Typen s und t sind strukturell äquivalent wenn W s = W t namentliche Äquivalenz Zwei Typen s und t sind namentlich äquivalent wenn s = t type S is... namentliche Äquivalenz subtype T is... strukturelle Äquivalenz Beispiel (Haskell) data S =... namentliche Äquivalenz type T =... strukturelle Äquivalenz Zusammenfassung Nächstes Mal: Speicher Datentypen sind Wertemengen mit darauf arbeitenden Datentypen sind entweder einfach oder zusammengesetzt direkt oder rekursiv Ausdrücke sind geschachtelte Operationsaufrufe Variablen Zeiger Lebensdauer Befehle

Walhalla der C.A.R. ( Tony ) Hoare. Notes on Data Structuring. In: Structured Programming. London: Academic Press, 1972. Erste systematische Behandlung von Datenstrukturen