Haskell, Typen, und Objektorientierung
|
|
|
- Johann Flater
- vor 6 Jahren
- Abrufe
Transkript
1 Haskell, Typen, und Objektorientierung ZIELE dieses Kapitels Haskells Typisierung Milners Polymorpher Typcheck Haskells Typklassen P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 1
2 Typisierung in Haskell Haskell hat eine starke, statische Typisierung. jeder Ausdruck muss einen Typ haben Typchecker berechnet Typen und prüft Typen zur Compilezeit die Theorie sagt: Es gibt keine Typfehler zur Laufzeit d.h. kein dynamischer Typcheck nötig. P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 2
3 Typisierung: Begriffe (andere Programmiersprachen) dynamische Typisierung schwache, statische Typisierung passiert zur Laufzeit. Datenobjekte haben einen Typ zur Laufzeit. bei falschem Aufruf: Laufzeit-Typfehler. Typcheck zur Kompilierzeit Aber man kann Typcheck umgehen deshalb: dynamischer Typcheck notwendig. Laufzeit Typfehler sind möglich Konstanten, Variablen (Bezeichner), Prozeduren und Funktionen haben einen im Programm festgelegten Typ. Typisch: Typen können zur Laufzeit per Programmbefehl abgefragt werden P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 3
4 Typisierung: Begriffe (andere Programmiersprachen) Monomorphe Typisierung Polymorphe Typisierung Alle Objekte, Funktionen haben einen eindeutigen Typ Typvariablen sind verboten Konsequenz: verschiedene Längenfunktionen für Listen von unterschiedlichem Typ Funktion arbeitet auf mehreren Daten-Typen Typvariablen: Mittel zur Schematisierung. parametrischer Polymorphismus. Eine einzige Längenfunktion für alle Listen reicht aus Ist auch in Java 5 für generische Typen anwendbar P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 4
5 Typisierung, Begriffe polymorph: Ein Ausdruck kann viele Typen haben (vielgestaltig, polymorph). Die (teilweise unendliche) Menge der Typen entspricht einem schematischen Typausdruck [α]->int ist das Schema Instanzen sind z.b. [Int]->Int, [Char]->Int, [[Char]]->Int P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 5
6 Syntax von Typen in Haskell (ohne Typklassen) Typ ::= Basistyp ( Typ ) Typvariable Typkonstruktor n { Typ } n (n = Stelligkeit) Basistyp ::= Int Integer Float Rational Char P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 6
7 Syntax von Typen Typkonstruktoren können benutzerdefiniert sein (z.b. Baum α) Vordefinierte Liste [ ] Typkonstruktoren: Tupel (.,...,.) Funktionen (Stelligkeit 2, Infix) Konvention zu Funktionstypen mit a b c d bedeutet: a (b (c d)). P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 7
8 Bemerkungen und Wiederholung spezielle syntaktische Konventionen für Tupel und Listen. Beispiel: Typangabe (Int, Char) [Int] t :: τ Basistypen nennt man elementare Typen Grundtyp: Typ ohne Typvariablen (auch monomorph) polymorph wenn der Typ Typvariablen enthält. P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 8
9 Beispiele [1,2,3] :: [Int] map :: (α β) [α] [β] (:) :: α [α] [α] length :: [α] Int P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 9
10 length :: [α] Int Interpretation der Typen logische Formel: Interpretation: α.length :: [α] Int Für alle Typen α ist length eine Funktion, die vom Typ [α] Int ist. Logisch gilt dann: x.x :: [α] (length x) :: Int P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 10
11 Typregeln Wie berechnet man Typen von Ausdrücken? Anwendung von Funktionen auf Argumente (σ, τ sind Typen) s :: σ τ, t :: σ (s t) :: τ Beispiele: quadrat :: Int Int, 2 : Int (quadrat 2) :: Int + :: Int (Int Int), 1 :: Int (1 +) :: (Int Int) ((1 +) 2) :: Int, 2 :: Int P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 11
12 Typregel Anwendung: mehrere Argumente s :: σ 1 σ 2... σ n τ, t 1 :: σ 1,..., t n :: σ n (s t 1... t n ) :: τ Beispiele + :: Int Int Int, 1 :: Int, 2 :: Int (+ 1 2) :: Int + :: Int Int Int (1 + 2) :: Int P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 12
13 Erweiterung der Anwendungsregel auf polymorphe Typen Ziel: Anwendung der Typregel für length oder map Die Funktion γ ist eine Typsubstitution wenn sie Typen für Typvariablen einsetzt γ(τ) nennt man Instanz von τ Beispiel Typsubstitution: Instanz: γ = {α Char, β Float} γ([α] Int) = [Char] Int P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 13
14 Erweiterung der Anwendungsregel auf polymorphe Typen s : σ τ, t : ρ und γ(σ) = γ(ρ) (s t) :: γ(τ) Hierbei: die Typvariablen in ρ müssen vorher umbenannt werden. P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 14
15 Beispiel zur polymorphen Anwendungsregel Typ von (map quadrat)? map :: (α β) [α] [β] Instanziiere mit: ergibt: {α Int, β Int} map :: (Int Int) [Int] [Int] Regelanwendung ergibt: map : (Int Int) [Int] [Int], quadrat :: (Int Int) (map quadrat) :: [Int] [Int] P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 15
16 Polymorphe Anwendungsregel für n Argumente s :: σ 1 σ 2... σ n τ, t 1 : ρ 1,..., t n : ρ n und i : γ(σ i ) = γ(ρ i ) (s t 1... t n ) :: γ(τ) Die Typvariablen in ρ 1,..., ρ n müssen vorher umbenannt werden. Beachte verwende möglichst allgemeines γ P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 16
17 Beispiel mit Typvariablen id x = x id :: α α. Berechne Typ von (map id) map:: (α β) [α] [β] id:: α α Regelanwendung: d.h. (map id) :: ([α] [α]). map : (α β) ([α] [β]), id :: α α (map id) :: γ([α] [β]) P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 17
18 Berechnung von Typsubstitutionen, die Typen gleichmachen Gegeben: δ i, ρ i, i = 1,..., n Gesucht: γ mit i : γ(δ i ) = γ(ρ i ). Die Berechnung mit den folgenden Regeln nennt man auch Unifikation. P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 18
19 Unifikation durch Transformation der Gleichungen Notation: σ = γ τ statt γ(σ) = γ(τ) Sei G eine Multimenge von Gleichungen, T C ein Typkonstruktor, α eine Typvariable, σ, τ (polymorphe) Typen. Regeln zur Umformung von Gleichungssystemen: (Dekomposition) (T C σ 1... σ m ) = γ (T C τ 1... τ m ), G σ 1 = γ τ 1,..., σ m = γ τ n, G Wenn die Typkonstruktoren rechts und links verschieden sind, dann kann man die Berechnung abbrechen; es kann keine Lösung geben. P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 19
20 Unifikation durch Transformation der Gleichungen: Regeln (Ersetzung) α = γ σ, G α = γ σ, G[σ/α] G[σ/α] bedeutet: Ersetze alle Vorkommen der Typvariablen α durch den Typ σ. Hierbei: Grund: σ darf α nicht enthalten Es gibt keine Lösung Vorsicht: sonst Nichtterminierung P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 20
21 Unifikation durch Transformation der Gleichungen: Regeln (Vereinfachung) α = γ α, G G (Vertauschung) σ = γ τ, G τ = γ σ, G P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 21
22 Unifikation durch Transformation der Gleichungen: Resultat Berechnung ist erfolgreich beendet, wenn das Gleichungssystem von der Form ist: α 1 = γ τ 1,..., α k = γ τ k wobei α i Typvariablen sind, und die α i in keinem τ j auftreten. Die gesuchte Typsubstitution ist ablesbar als γ = {α 1 τ 1,..., α k τ k } P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 22
23 Beispiel map id nochmal; Variante 1 Typsubstitutionen unterschiedlich, je nach Regelanwendung: map :: (α β) [α] [β], id :: α α (map id) :: γ([α] [β]) Berechnen von γ: α β = γ α α α = γ α, β = γ α Das ergibt: γ = {α α, β α } und (map id) :: [α ] [α ] P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 23
24 Beispiel map id Variante 2 Berechnung von γ mit vertauschten Regelanwendungen: α β = γ α α α = γ α, β = γ α α = γ α, β = γ α α = γ α, β = γ α Das ergibt γ = {α α, β α} und (map id) :: [α] [α] Wegen All-Quantifizierung sind die Typen (bis auf Umbenennung) identisch P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 24
25 Typsubstitutionen: Allgemeinere Definition Sei V eine Menge von Typvariablen. und γ, γ zwei Typsubstitutionen. Dann ist γ allgemeiner als γ, wenn es eine weitere Typsubstitution δ gibt, so dass x V : δ(γ(x)) = γ (x) Es gilt: Unifikation berechnet allgemeinste Typsubstitutionen P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 25
26 Beispiel zu Typsubstitutionen γ = {α 1 (α 2, β 2 )} γ = {α 1 (Int, Int)} γ ist allgemeiner als γ : Nehme δ = {α 2 Int, β 2 Int}. Dann ist δ(γ(α 1 )) = (Int, Int) = γ (α 1 ). P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 26
27 Beispiel zu polymorpher Typberechnung Berechne Typ der Liste [1]: [1] = 1 : [] 1 :: Int und [] :: [β] (Typen der Konstanten) (:) :: α [α] [α] Anwendungsregel mit γ = {α Int} ergibt: (1 :) :: [Int] [Int] Anwendungsregel mit γ 2 = {β Int} ergibt: (1 : []) :: [Int] P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 27
28 Beispiel zu Typfehler [1, a ] hat keinen Typ: 1 : ( a : []) (voll geklammert) 1 :: Integer, [] :: [β], a :: Char Typen der Konstanten. (1 :) :: [Integer] [Integer] und a :[] :: [Char]. Kein Typ als Resultat, denn: [Integer] und [Char] sind verschieden unter allen γ. P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 28
29 Beispiel zu Typfehler;Hugs Test > [1, a ] ERROR - Illegal Haskell 98 class constraint in inferred type *** Expression : [1, a ] *** Type : Num Char => [Char] P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 29
30 Typ eines Ausdrucks Typ von (map quadrat [1,2,3,4]) : map:: (α β) [α] [β] quadrat:: Int Integer, und [1, 2, 3, 4] :: [Integer]. γ = {α Integer, β Integer}. Das ergibt: γ(α) = Integer, γ([α]) = [Integer], γ([β]) = [Integer]. Resultat: γ([β]) = [Integer] P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 30
31 Typisierung von Funktionen, Milner Problematik: rekursiv definierte Funktionen Lambda-Ausdrücke, let-ausdrücke Listen-Komprehensionen. Typcheckalgorithmus von Robin Milner (in Haskell und ML) Schnell, liefert allgemeinste (Milner-)Typen schlechte worst-case Komplexität: in seltenen Fällen exponentieller Platzbedarf Liefert in seltenen Fällen nicht die allgemeinsten möglichen polymorphen Typen P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 31
32 Typisierung von Funktionen, Milner Satz zur Milner-Typisierung in Haskell: Sei t ein getypter Haskell-Ausdruck, ohne freie Variablen (d.h. geschlossen). Dann wird die Auswertung des Ausdrucks t nicht mit einem Typfehler abbrechen. P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 32
33 Typisierung rekursiv definierter Funktionen length [] = 0 length (x:xs) = (1 + length xs) der erhaltene Typ ist Num a => [b] -> a Das ist auch der Typ von genericlength im Modul List P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 33
34 Typisierung rekursiv definierter Funktionen Vorgehen bei der Berechnung des Typs einer rekursiven Funktion f x_1... x_n =... Annahmen:f:: α x 1:: β 1... x n:: β n, Resultat: β n+1, Ergibt Typgleichung α = β 1 ->... ->β n ->β n+1 bei Pattern verwende extra Gleichungen x i = p i Typregeln zum Berechnen der Typen der Definitionsgleichung Bei bekannten Funktionen: verwende umbenannten Typ. Bei f: verwende α Lösung von Typgleichungen mittels Unifikationsalgorithmus Gleichsetzen der Typen der linken und rechten Seiten von Definitionsgleichungen Resultat: γ(β 1 ->... ->β n ->β n+1 ) wobei γ die insgesamt berechnete Typsubstitution ist. P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 34
35 Typisierung rekursiv definierter Funktionen (2) [] ++ ys = ys (x:xs) ++ ys = x: (xs++ys) P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 35
36 Typisierung rekursiv definierter Funktionen (2) [] ++ ys = ys (x:xs) ++ ys = x: (xs++ys) Annahmen: x:xs:: β 1, ys:: β 2 α = β 1 β 2 β 3 [] ++ ys = ys β 1 = [α 1 ], β 3 = β 2 (x:xs) x:: α 2, xs:: α 3, ergibt: α 3 = [α 2 ] = β 1 (x:xs) ++ ys [α 1 ] = [α 2 ], also α 1 = α 2 (xs++ys) :: β 2 keine neue Gleichung; x: (xs++ys) β 2 = [α 1 ] Erst hier wird der Resultattyp eingeschränkt! Ergebnis: ++:: [α 1 ] [α 1 ] [α 1 ] P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 36
37 Typisierung und Reduktion, genauer Erinnerung Beta-Reduktion: ((λx.t) s) t[s/x] λx.t :: τ 1 τ 2, s :: σ, γ(τ 1 ) = γ(σ) ((λx.t) s) : γ(τ 2 ) Zum Ermitteln von γ(τ 2 ) benötigt man eine Typsubstitution γ, so dass γ(τ 1 ) = γ(σ) ist. P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 37
38 Typisierung und Reduktion, genauer ((λx.t) s) t[s/x] Was ist der Typ von t[s/x]? Beh: ((λx.t) s) :: τ impliziert t[s/x] :: τ Argumentation: Milner-Typcheck beachtet nur den Typ der Unterterme, nicht deren syntaktische Form. Typ von x und s ist aber gleich (als Unterterm von t) denn γ(τ 1 ) = γ(σ) Folgerung: auch mehrere Beta-Reduktionen erhalten den ursprünglichen Typ Analoge Argumentation für andere Auswertungsregeln! P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 38
39 Typisierung und Reduktion, genauer Beachte: Nach Beta-Reduktion kann ein Ausdruck mehr Typen haben Beispiel: (((λx.(λy.x)) 1) u) Beta-Reduktion: (λy.1) u Beta-Reduktion: 1 u ungetypt. Deshalb ist der Ausdruck ungetypt. ungetypt getypt; vom Typ Integer P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 39
40 Bemerkungen zu anderen Programmiersprachen Lisp und Scheme (strikte funktionale Programmiersprachen) haben kein statisches Typsystem. der Grund liegt in der Konzeption, z.b. der Booleschen Werte In Lisp: Nil bedeutet auch False, alles andere gilt als True. Auswertung: 1 = 0 Nil, 1 = 1 1. Weitere Schwierigkeit: Typeffekte von Zuweisungen P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 40
41 Bemerkungen zu anderen Programmiersprachen Verwendung der arithmetischen Operatoren Überladung von +,,... Manche Programmiersprachen nutzen automatische (dynamische) Typkonversion Haskell: keine Typkonversion eingegebene Zahlkonstanten sind überladen 1 wird vom Compiler als (frominteger 1) eingefügt Typkonversion von Hand einfügen: Z.B. pi + 2%3 ergibt einen Typfehler, pi + (fromrational (2%3)) ::Double ergibt P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 41
42 Python und Typisierung Python ist statisch ungetypt. Vermutlich wäre ein monomorphes Typsystem für Python möglich Man muss syntaktische Elemente hinzufügen Schwierige Kombination: Python erlaubt Lambda-Ausdrücke und Zuweisung P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 42
43 Java und Typisierung Java 1.4 ist streng getypt. Das Typsystem ist monomorph. die Java-Klassen entsprechen den elementaren Typen. Zusätzlich gibt es einen Untertyp-Begriff für Klassen. Die dynamischen Typfehler sind meist (cast)-fehler. Java 5 ist streng getypt. Das Typsystem ist polymorph. Zusätzlich gibt es einen Untertyp-Begriff für Klassen. Kompliziertere statische Typangaben nötig Weniger dynamische Typfehler. P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite 43
Haskell, Typen und Typberechnung
Kapitel 5 Haskell, Typen und Typberechnung 5.1 Typisierung in Haskell In diesem Kapitel sind die Typisierungsmethoden in Haskell beschrieben, wobei auch kurz auf die Typisierung in anderen Programmiersprachen
Haskell, Typen und Typberechnung
Kapitel 5 Haskell, Typen und Typberechnung 5.1 Typisierung in Haskell In diesem Kapitel sind die Typisierungsmethoden in Haskell beschrieben, wobei auch kurz auf die Typisierung in anderen Programmiersprachen
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
Haskell, Typen und Typberechnung
Kapitel 3 Haskell, Typen und Typberechnung 3.1 Typisierung in Haskell In diesem Kapitel sind die Typisierungsmethoden in Haskell beschrieben, wobei auch kurz auf die Typisierung in anderen Programmiersprachen
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
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
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
Einführung in die funktionale Programmierung
Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 17. Oktober 2006 Einführung in Haskell: Syntax, Reduktionen, Kernsprachen Haskell,
Grundlagen der Programmierung 2 (1.A)
Grundlagen der Programmierung 2 (1.A) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 18. April 2007 Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte
Übersicht. Einführung in die Funktionale Programmierung: Ziele des Kapitels. Typisierung Prof Dr. Manfred Schmidt-Schauß WS 2012/13
Übersicht Einführung in die Funktionale Programmierung: Typisierung Prof Dr. Manfred Schmidt-Schauß WS 2012/13 1 Motivation 2 Typen: Sprechweisen, Notationen und Unifikation 3 Typisierungsverfahren Iteratives
Einführung in die funktionale Programmierung
Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 28. Oktober 2008 Einführung in Haskell: Syntax, Reduktionen, Kernsprachen Haskell,
Grundlagen der Programmierung 2. Operationale Semantik
Grundlagen der Programmierung 2 Operationale Semantik Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 29. April 2009 Semantik von Programmiersprachen Semantik = Bedeutung
Programmiersprachen: Klassifizierung und Methoden. Programmier-Paradigmen. Grundlagen der Programmierung 2 (1.C) - 1 -
Programmiersprachen: Klassifizierung und Methoden Programmier-Paradigmen Grundlagen der Programmierung 2 (1.C) - 1 - Programmiersprachen: Begriffe Syntax Beschreibung der Programme als Texte let xyz =
Der einfach getypter Lambda-Kalkül
Der einfach getypter Lambda-Kalkül Typprüfung und Typinferenz Tobias Nipkow und Steffen Smolka Technische Universität München 1 Einleitung 2 Explizit getypter λ-kalkül 3 Implizit getypter λ-kalkül Statische
Lösungen zum Aufgabenblatt 10 Logik und modelltheoretische Semantik
Lösungen zum Aufgabenblatt 10 Logik und modelltheoretische Semantik Universität München, CIS, SS 2013 Hans Leiß Abgabetermin: Do, 4.7.2013, 16 Uhr, in meinem Postfach Aufgabe 10.1 Vereinfache die folgenden
Operationale Semantik: Haskell
Kapitel 4 Operationale Semantik: Haskell 4.1 Semantik von Programmiersprachen Programme sind zunächst mal nur Text. Programme sollen aber etwas im Rechner bewirken bzw. eine Funktion oder Funktionalität
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
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
Funktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda
ALP I SS 2011 Funktionstypen Funktionen haben einen Datentyp, der folgende allgemeine Form hat: functionname :: T 1 -> T 2, wobei T 1, T 2 wiederum beliebige Datentypen sind Beispiel: T 1 T 2 Der Datentyp
Stackmaschine; Speicheradressierung
Stackmaschine; Speicheradressierung Erweiterung um globalen Speicher (Heap, Halde) pro Speicherplatz eine Zahl. Notation ist als Array SP [0..]. Zugriff mittels Adresse (Index): eine Zahl i.a.: Zahlen
Typklassen und Überladung in Haskell
Typklassen und Überladung in Haskell Überladung: Es gibt mehrere Funktionen mit gleichem Namen. der Typ der Argumente bestimmt, welche gemeint ist. (1; i) + (3; 2i) statt (1, i) complexadd (3; 2i). Haskell-Typklassen:
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
Programmieren in Haskell
Programmieren in Haskell Wir steigen ein... Programmieren in Haskell 1 Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke und Werte Datentypen Funktionen Aufgabe für diese Woche Programmieren
Listen und Listenfunktionen. Grundlagen der Programmierung 2 A (Listen) Listen und Listenfunktionen. Listen? Haskell: Listen
Listen und Listenfunktionen Grundlagen der Programmierung 2 A (Listen) Haskell: Listen Prof. Dr. Manfred Schmidt-Schauß Listen modellieren Folgen von gleichartigen, gleichgetypten Objekten. Ausdruck im
Grundlagen der Programmierung 2 (1.A)
Grundlagen der Programmierung 2 (1.A) Einführung Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Grundlagen der Programmierung 2 Geplanter Inhalt der ersten Hälfte: Programmieren in Haskell Definitionen;
Programmieren in Haskell Einstieg in Haskell
Programmieren in Haskell Einstieg in Haskell Peter Steffen Universität Bielefeld Technische Fakultät 24.10.2008 1 Programmieren in Haskell Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke
Haskell und Python. pures Programmieren, Auswerten von Ausdrücken rekursives Programmieren, Typsystem. Python: Eine prozedurale Programmiersprache
Haskell und Python Haskell: Eine funktionale Programmiersprache funktional, nicht-strikt, hat ein polymorphes und starkes Typsystem, flexible Datenstrukturen, gute Abstraktionseigenschaften, Ziele: pures
Grundlagen der Programmierung 2 (1.A)
Grundlagen der Programmierung 2 (1.A) Einführung Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2015 Grundlagen der Programmierung 2 Geplanter Inhalt der ersten Hälfte: Programmieren in Haskell Definitionen;
Beweise und Typen. 9.1 Formalisierung und Beweis
120 9. Beweise und Typen 9 Beweise und Typen Dieses Kapitel ist zweigeteilt. Als erstes wenden wir uns dem Thema zu, wie wir Eigenschaften von funktionalen Programmen beweisen können. Aufwandsabschätzungen
Beispiel: Hamming-Folge Erzeuge eine Folge X = x 0,x 2,... mit folgenden Eigenschaften: 1. x i+1 > x i für alle i
Beispiel: Hamming-Folge Erzeuge eine Folge X = x 0,x 2,... mit folgenden Eigenschaften: 1. x i+1 > x i für alle i FP-8.7 2. x 0 = 1 3. Falls x in der Folge X auftritt, dann auch 2x, 3x und 5x. 4. Nur die
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
Basiskonstrukte von Haskell
Basiskonstrukte von Haskell PD Dr. David Sabel Goethe-Universität Frankfurt am Main 29. September 2015 Basistypen und Operationen Ganzzahlen: Int = Ganzzahlen beschränkter Länge Integer = Ganzzahlen beliebiger
Abschnitt 11: Korrektheit von imperativen Programmen
Abschnitt 11: Korrektheit von imperativen Programmen 11. Korrektheit von imperativen Programmen 11.1 11.2Testen der Korrektheit in Java Peer Kröger (LMU München) in die Programmierung WS 16/17 931 / 961
LR-Parser, Shift-Reduce-Verfahren
LR-Parser, Shift-Reduce-Verfahren Bottom-Up-Syntaxanalyse LR-Parser L: Eingabe von links nach rechts; R: Rechtsherleitung Shift-Reduce-Verfahren Beachte: Kein Backtracking nicht auf jede Grammatik anwendbar
Programmieren in Haskell Das Haskell Typsystem
Programmieren in Haskell Das Haskell Typsystem Peter Steffen Robert Giegerich Universität Bielefeld Technische Fakultät 22.01.2010 1 Programmieren in Haskell Belauscht... Lisa Lista: Ohne Typen keine korrekten
HASKELL KAPITEL 2.1. Notationen: Currying und das Lambda-Kalkül
HASKELL KAPITEL 2.1 Notationen: Currying und das Lambda-Kalkül Bisheriges (Ende VL-Teil 1) weite :: (Float,Float) ->Float weite (v0, phi) = (square(v0)/9.81) * sin(2 * phi) (10, 30 ) smaller ::(Integer,
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........................................
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........................................
Grundlagen der Programmierung 2 (1.A)
Grundlagen der Programmierung 2 (1.A) Einführung Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2018 Grundlagen der Programmierung 2 Geplanter Inhalt der ersten Hälfte: Programmieren in Haskell Definitionen;
Grundprinzipien der funktionalen Programmierung
Grundprinzipien der funktionalen Programmierung Funktionen haben keine Seiteneffekte Eine Funktion berechnet einen Ausgabewert der nur von den Eingabewerten abhängt: 12 inputs + output 46 34 2 Nicht nur
HASKELL KAPITEL 8. Bäume
HASKELL KAPITEL 8 Bäume Baum rekursiv definierte Datenstruktur nicht linear vielerlei Varianten: Struktur der Verzweigung, Ort der gespeicherten Information (Knoten, Kanten, Blätter ) 2 Binärbaum Jeder
Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08
Kapitel 4 Programmierkurs Birgit Engels, Anna Schulze Wiederholung Kapitel 4 ZAIK Universität zu Köln WS 07/08 1 / 23 2 Datentypen Arten von Datentypen Bei der Deklaration einer Variablen(=Behälter für
Generizität, Abstraktion, Rekursion
Kapitel 17 Generizität, Abstraktion, Rekursion 17.1 Generische Klassen Fragen: was ist der Typ einer generischen Klasse? Kann man zwischen generischen Klassen Vererbung definieren? Kann man zwischen generischen
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
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
5.3 Auswertung von Ausdrücken
5.3 Auswertung von Ausdrücken Funktionen in Java bekommen Parameter/Argumente als Input, und liefern als Output den Wert eines vorbestimmten Typs. Zum Beispiel könnte man eine Funktion i n t min ( i n
Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders
Typisierung Effiziente Programmierung Thomas Schnieders Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg 2018-04-26 Thomas Schnieders Typisierung 1
3. Java - Sprachkonstrukte I
Lernziele 3. Java - Sprachkonstrukte I Namen und Bezeichner, Variablen, Zuweisungen, Konstanten, Datentypen, Operationen, Auswerten von Ausdrücken, Typkonversionen Sie kennen die grundlegensten Bausteine
Programmieren in Haskell
Programmieren in Haskell Wir steigen ein... Programmieren in Haskell 1 Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke und Werte Datentypen Funktionen Aufgabe für s Wochenende Programmieren
3. Java - Sprachkonstrukte I
84 3. Java - Sprachkonstrukte I Namen und Bezeichner, Variablen, Zuweisungen, Konstanten, Datentypen, Operationen, Auswerten von Ausdrücken, Typkonversionen Namen und Bezeichner 85 Ein Programm (also Klasse)
3. Java - Sprachkonstrukte I
Namen und Bezeichner Ein Programm (also Klasse) braucht einen Namen 3. Java - Sprachkonstrukte I Namen und Bezeichner, Variablen, Zuweisungen, Konstanten, Datentypen, Operationen, Auswerten von Ausdrücken,
1. Typen 1.1 Typsicherheit 1.2 Typprüfung
1. Typen 1.1 Typsicherheit 1.2 Typprüfung Ein Typsystem ist ein praktikables, syntaktisches Verfahren, mit dem man die Abwesenheit gewisser Laufzeit-Eigenschaften eines Programms beweisen kann, indem man
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 =
Funktionale Programmierung. Das Funktionale Quiz. Das Funktionale Quiz. Das Funktionale Quiz
Funktionale Programmierung Das Funktionale Quiz 31.5.2005 Nenne eine Gemeinsamkeit zwischen Typklassen und OO-Klassen Das Funktionale Quiz Das Funktionale Quiz Nenne einen Unterschied zwischen Typklassen
ProInformatik: Funktionale Programmierung. Punkte
ProInformatik: Funktionale Programmierung 27.7-22.8.2008, M. Knobelsdorf Probeklausur Ihre persönliche Klausurnummer: Vorname, Nachname: Aufgabe 1 2 3 4 5 6 7 8 Punkte 12 4 4 4 4 2 4 6 40 Erz. Punkte Zum
Einführung in Haskell
Kapitel 2 Einführung in Haskell Dieses Kapitel enthält eine Einführung in Haskell, eine nicht-strikte funktionale Programmiersprache mit polymorphem Typsystem. Ziel in diesem Kapitel ist: Darstellung der
