Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell
|
|
- Heini Heintze
- vor 8 Jahren
- Abrufe
Transkript
1 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 Typcheck (Robin Milner) Sommersemester Grundlagen der Programmierung 2 (Typen-A) 2/36 Einige andere Programmiersprachen Typisierung in Haskell ab Java 5: generische Typen verwandt mit polymorphen Typen ML (und CAML, OCAML) hat parametrisch polymorphes Typsystem JavaScript Nachteile: Es fehlt eine statische Typisierung TypeScript (Microsoft): Neue JavaScript Variante mit statischer Typisierung und Typinferenz. Google Ankündigung: Angular 2 (JavaScript-Webframework) zukünftig auf Basis von TypeScript Haskell hat eine starke, statische Typisierung. mit parametrisch polymorphen Typen. jeder Ausdruck muss einen Typ haben Der Typchecker berechnet Typen aller Ausdrücke und prüft Typen zur Compilezeit Es gibt keine Typfehler zur Laufzeit d.h. kein dynamischer Typcheck nötig. Grundlagen der Programmierung 2 (Typen-A) 3/36 Grundlagen der Programmierung 2 (Typen-A) 4/36
2 Überladung und Konversion in Haskell Typisierung, Begriffe polymorph: Ein Ausdruck kann viele Typen haben (vielgestaltig, polymorph). Haskell: keine Typkonversion Es gibt Überladung: z.b. arithmetische Operatoren: +,., / Zahlkonstanten für ganze Zahlen sind überladen parametrisch polymorph: Beispiel Schema: Die (i.a. unendliche) Menge der Typen entspricht einem schematischen Typausdruck length [a]->int Instanzen: [Int]->Int, [Char]->Int, [[Char]]->Int usw. Grundlagen der Programmierung 2 (Typen-A) 5/36 Grundlagen der Programmierung 2 (Typen-A) 6/36 Syntax von Typen in Haskell (ohne Typklassen) Syntax von Typen Typ ::= Basistyp ( Typ ) Typvariable Typkonstruktor n { Typ } n (n = Stelligkeit) Basistyp ::= Int Integer Float Rational Char Typkonstruktoren können benutzerdefiniert sein (z.b. Baum a) Vordefinierte Liste [ ] Typkonstruktoren: Tupel (.,...,.) Funktionen (Stelligkeit 2, Infix) Konvention zu Funktionstypen mit a b c d bedeutet: a (b (c d)). Grundlagen der Programmierung 2 (Typen-A) 7/36 Grundlagen der Programmierung 2 (Typen-A) 8/36
3 Interpretation der Typen Komposition Beispiel: Komposition von Funktionen: komp::(a -> b) -> (c -> a) -> c -> b komp f g x = f (g x) length :: [a] -> Int Interpretation: Für alle Typen typ ist length eine Funktion, die vom Typ [typ] Int ist. In Haskell ist komp vordefiniert und wird als. geschrieben: Beispielaufruf: *Main> suche_nullstelle (sin. quadrat) (sin. quadrat) entspricht sin(x 2 ) und quadrat. sin entspricht (sin(x)) 2. Grundlagen der Programmierung 2 (Typen-A) 9/36 Grundlagen der Programmierung 2 (Typen-A) 10/36 Typ der Komposition Typen von Konstruktoren Erklärung zum Typ von komp, wobei {a,b,c} Typvariablen sind. Ausdruck: f komp g bzw. f. g (a->b) -> (c->a) -> c->b Typ von (.) (τ 1 -> τ 2 ) Typ von f (τ 3 -> τ 1 ) Typ von g τ 3 Typ des Arguments x der Komposition f. g τ 2 Typ des Resultats der Komposition f(g x) (τ 3 -> τ 2 ) Typ von (f. g) x :: τ 3 g τ 1 f τ 2 Typen von Konstruktoren werden durch deren data-definition automatisch festgelegt! data Baum a b = Empty Blatt b Knoten a (Baum a b) Baum a b) Typen der Konstruktoren: Empty :: Baum a b Blatt :: b Baum a b Knoten :: b Baum a b Baum a b Baum a b Grundlagen der Programmierung 2 (Typen-A) 11/36 Grundlagen der Programmierung 2 (Typen-A) 12/36
4 Typregeln Typregel Anwendung : mehrere Argumente Wie berechnet man Typen von Ausdrücken? Anwendung von Funktionsausdruck auf Argument s :: σ τ, t :: σ (s t) ::? Beispiele: quadrat :: Int Int, 2 :: Int (quadrat 2) ::? + :: Int (Int Int), 1 :: Int (1 +) ::?, 2:: Int ((1 +) 2) ::? Beispiele s :: σ 1 σ 2... σ n τ, t 1 :: σ 1,..., t n :: σ n (s t 1... t n ) :: τ + :: Int Int Int, 1 :: Int, 2 :: Int (+ 1 2) :: Int + :: Int Int Int (1 + 2) :: Int Grundlagen der Programmierung 2 (Typen-A) 13/36 Grundlagen der Programmierung 2 (Typen-A) 14/36 Beispiel Anwendungsregel für polymorphe Typen even::int -> Bool a -> b =. Int -> Bool (.)::(a -> b) -> (c -> a) -> c -> b c -> b =. Int -> Bool quadrat::int -> Int c -> a =. Int -> Int Ziel: Anwendung der Typregel für z.b. length oder map Neuer Begriff: γ ist eine Typsubstitution wenn sie Typen für Typvariablen einsetzt γ(τ) nennt man Instanz von τ even. quadrat :: Int -> Bool Beispiel Typsubstitution: Instanz: γ = {a Char, b Float} γ([a] Int) = [Char] Int Grundlagen der Programmierung 2 (Typen-A) 15/36 Grundlagen der Programmierung 2 (Typen-A) 16/36
5 Anwendungsregel für polymorphe Typen Beispiel zur polymorphen Anwendungsregel Typ von (map quadrat)? s :: σ τ, t :: ρ und γ(σ) = γ(ρ) (s t) :: γ(τ) Berechnet den Typ von (s t) wenn Typen von s, t schon bekannt sind Hierbei ist zu beachten: die Typvariablen in ρ müssen vorher umbenannt werden, so dass σ und ρ keine gemeinsamen Typvariablen haben. map :: (a b) ([a] [b]) Instanziiere mit: γ = {a Int, b Int} ergibt: map :: (Int Int) ([Int] [Int]) Regelanwendung ergibt: map :: (Int Int) ([Int] [Int]), quadrat :: (Int Int) (map quadrat) :: [Int] [Int] Grundlagen der Programmierung 2 (Typen-A) 17/36 Grundlagen der Programmierung 2 (Typen-A) 18/36 Polymorphe Regel für n Argumente Wie berechnet man die Typsubstitutionen? s :: σ 1 σ 2... σ n τ, t 1 :: ρ 1,..., t n :: ρ n und i : γ(σ i ) = γ(ρ i ) (s t 1... t n ) :: γ(τ) Unifikation: Berechnung der allgemeinsten Typsubstitution im Typberechnungsprogramm bzw Typchecker Die Typvariablen in ρ 1,..., ρ n müssen vorher umbenannt werden. Unifikation wird benutzt im Typchecker von Haskell! Beachte: verwende möglichst allgemeines γ (kann berechnet werden; s.u.) Grundlagen der Programmierung 2 (Typen-A) 19/36 Grundlagen der Programmierung 2 (Typen-A) 20/36
6 polymorphe Typen; Unifikation Unifikation: Regelbasierter Algorithmus s :: σ τ, t :: ρ und γ ist allgemeinster Unifikator von σ. = ρ (s t) :: γ(τ) Man braucht 4 Regeln, die auf (E; G) operieren: E: Menge von Typgleichungen, G: Lösung; mit Komponenten der Form x t. (die Typvariablen in ρ müssen vorher umbenannt werden.) Beachte; x sind Typvariablen, t sind Typen, f, g sind Typkonstruktoren Grundlagen der Programmierung 2 (Typen-A) 21/36 Grundlagen der Programmierung 2 (Typen-A) 22/36 Unifikation: Die Regeln Unifikation: Regelbasierter Algorithmus Start mit G = ; E G; {x. = x} E G; E G; {t. = x} E G; {x. = t} E G; {x =. t} E G[t/x] {x t}; E[t/x] G; {(f s 1... s n ). = (f t 1... t n )} E G; {s 1. = t1,..., s n. = tn )} E Wenn t keine Variable ist Wenn x nicht in t vorkommt Fehlerabbruch, wenn: x =. t in E, x t und x kommt in t vor. (f(...) =. g(...) kommt in E vor und f g. Fehlerabbruch bedeutet: nicht typisierbar Ersetzung: Effekt: E[t/x]: alle Vorkommen von x werden durch t ersetzt G[t/x]: jedes y s wird durch y s[t/x] ersetzt Grundlagen der Programmierung 2 (Typen-A) 23/36 Grundlagen der Programmierung 2 (Typen-A) 24/36
7 Beispiel mit Typvariablen Berechne Typ von (map id) map:: (a b) ([a] [b]) id:: a a Gesuchter Typ: γ([a] [b]) Regelanwendung benötigt Lösung γ von (a b). = (a a ): G E ; {(a b) =. (a a )} ; {a =. a, b =. a } {a a }; {b =. a } {a a, b a }; {a a, b a }; Einsetzung der Lösung γ = {a a, b a } in [a] [b] ergibt: (map id) :: ([a ] [a ]). Beispiel (foldr (:) []) ::?? foldr :: (a -> b -> b) -> b -> [a] -> b (:) :: a -> [a] -> [a] umbenannt: c -> [c] -> [c] ([]) :: [a] umbenannt: [d] G E {a b b =. c [c] [c], b =. [d]} {b [d]} {a [d] [d] =. c [c] [c]} {b [d]} {a =. c, [d] =. [c], [d] =. [c]} {b [d], a c} {[d] =. [c], [d] =. [c]} {b [d], a c} {d =. c, [d] =. [c]} {b [c], a c, d c} {[c] =. [c]} {b [c], a c, d c} {c =. c} {b [c], a c, d c} {} (foldr (:) [])::[c] [c] = γ([a] b) Grundlagen der Programmierung 2 (Typen-A) 25/36 Grundlagen der Programmierung 2 (Typen-A) 26/36 Beispiel. Linksfaltung: (foldl (:) [])? Beispiel zu Typberechnung foldl :: (a -> b -> a) -> a -> [b] -> a (:) :: a -> [a] -> [a] umbenannt: c -> [c] -> [c] ([]) :: [a] umbenannt: [d] G E {a b a =. c [c] [c], a =. [d]} {a [d]} {[d] b [d] =. c [c] [c]} {a [d]} {[d] =. c, b =. [c], [d] =. [c]} {a [d], b [c]} {[d] =. c, [d] =. [c]} {a [d], b [c]} {c =. [d], [d] =. [c]} {a [d], b [[d]], c [d]} {[d] =. [[d]]} {a [d], b [[d]], c [d]} {d =. [d]} nicht lösbar, da d in [d] echt vorkommt Typ von map length map :: (a b) ([a] [b]), length :: [a ] Int (map length) ::? = γ([a] [b]) Unifiziere (a b). = [a ] Int G E ; {(a b) =. ([a ] Int)} ; {a =. [a ], b =. Int} {a [a ]}; {b =. Int} {a [a ], b Int}; Somit: (map length) :: γ([a] [b]) = [[a ]] [Int] (foldl (:) []) ist nicht typisierbar! Grundlagen der Programmierung 2 (Typen-A) 27/36 Grundlagen der Programmierung 2 (Typen-A) 28/36
8 Beispiele zu polymorpher Typberechnung Beispiel zu Typfehler Berechne Typ der Liste [1]: 1 : Int (:) :: a [a] [a] [] :: [b] 1 : [] ::? Anwendungsregel ergibt Gleichungen: {a. = Int, [a]. = [b]} Lösung: γ = {a Int} Typ (1 : []) :: [Int] [1, a ] hat keinen Typ: 1 : ( a : []) 1 :: Integer, [] :: [b], a :: Char (Typen der Konstanten.) (1 :) :: [Integer] [Integer] und ( a :[]) :: [Char]. Kein Typ als Resultat, denn: [Integer]. = [Char] ist nicht lösbar. Grundlagen der Programmierung 2 (Typen-A) 29/36 Grundlagen der Programmierung 2 (Typen-A) 30/36 Beispiel zu Typfehler im Interpreter Typ eines Ausdrucks Prelude> [1, a ] <interactive>:1:1: No instance for (Num Char) arising from the literal 1 at <interactive>:1:1 Possible fix: add an instance declaration for (Num Char) In the expression: 1 In the expression: [1, a ] In the definition of it : it = [1, a ] Typ von (map quadrat [1,2,3,4]) : map:: (a b) [a] [b] quadrat:: Integer Integer, und [1, 2, 3, 4] :: [Integer]. γ = {a Integer, b Integer}. Das ergibt: γ(a) = Integer, γ([a]) = [Integer], γ([b]) = [Integer]. Resultat: γ([b]) = [Integer] Grundlagen der Programmierung 2 (Typen-A) 31/36 Grundlagen der Programmierung 2 (Typen-A) 32/36
9 Typisierung von Funktionen und Ausdrücken Typisierung von Funktionen, Milner Kompexe Sprachkonstrukte: rekursiv definierte Funktionen Lambda-Ausdrücke, let-ausdrücke Listen-Komprehensionen. Typcheckalgorithmus von Robin Milner (in Haskell und ML) ist schnell, (i.a.) liefert allgemeinste (Milner-)Typen benutzt Unifikation (eine optimierte Variante) schlechte worst-case Komplexität: in seltenen Fällen exponentieller Zeitbedarf Liefert in seltenen Fällen nicht die allgemeinsten möglichen polymorphen Typen Satz zur Milner-Typisierung in Haskell: Sei t ein getypter Haskell-Ausdruck, ohne freie Variablen. Dann wird die Auswertung des Ausdrucks t nicht mit einem Typfehler abbrechen. Allgemeine Aussage zu starken Typsystemen Es gibt keine dynamischen Typfehler, wenn das Programm statisch korrekt getypt ist Grundlagen der Programmierung 2 (Typen-A) 33/36 Grundlagen der Programmierung 2 (Typen-A) 34/36 Typisierung und Reduktion Typisierung und Reduktion Beachte: Nach Reduktionen kann ein Ausdruck mehr Typen (bzw. einen allgemeineren Typ) haben als vor der Reduktion Beispiel: if 1 > 0 then [] else [1] :: [Integer] arithmetische-reduktion: if True then [] else [1] :: [Integer] weiteres Beispiel: (if 1 > 0 then foldr else foldl) :: (a -> a -> a) -> a -> [a] -> a Reduktion ergibt als Resultat: foldr:: (a -> b -> b) -> b -> [a] -> b Case-Reduktion: [] :: [a] der Typ ist allgemeiner geworden! Grundlagen der Programmierung 2 (Typen-A) 35/36 Grundlagen der Programmierung 2 (Typen-A) 36/36
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
MehrGrundlagen 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
MehrHaskell, 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
MehrHaskell, Typen, und Objektorientierung
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
MehrHaskell, 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
MehrHaskell, 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
MehrHaskell, 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
MehrEinfü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
MehrEinführung in die funktionale Programmierung
Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 18. November 2008 Typcheck zu KFPT; KFPTS;... Ziele des Kapitels: Polymorphes
MehrGrundlegende 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
MehrGrundlegende Datentypen
Funktionale Programmierung Grundlegende Datentypen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 14.11.2017 15:37 Inhaltsverzeichnis Typen........................................
MehrDer 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
MehrFunktionale 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........................................
MehrGrundlegende 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
MehrALP I. Funktionale Programmierung
ALP I Funktionale Programmierung Typ-Klassen und SS 2011 Überladung von Datentypen Funktionen sollen oft auf verschiedene Datentypen anwendbar sein, aber nicht auf beliebige Datentypen. Beispiel: Die (+)
MehrGrundlagen der Programmierung 2 (2.A)
Grundlagen der Programmierung 2 (2.A) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 5. Mai 2011 Listen und Listenfunktionen Listen modellieren Folgen von gleichartigen,
MehrFunktionale 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
MehrEinführung in Funktionale Programmierung Typisierung
Einführung in Funktionale Programmierung Typisierung PD Dr. David Sabel WS 2015/16 Stand der Folien: 19. November 2015 Motivation Typen Typisierungsverfahren Ziele des Kapitels Warum typisieren? Typisierungsverfahren
MehrPraktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie
16:02:01 2017-01-17 1 [37] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 08.11.2016: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2016/17 PI3 WS 16/17
MehrGrundlagen der Programmierung 2 (1.C)
Grundlagen der Programmierung 2 (1.C) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 3. Mai 2006 Funktionen auf Listen: map map :: (a -> b) -> [a] -> [b] map f [] = []
MehrGrundlagen 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
MehrDie 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
MehrGrundlagen der Programmierung 2 (1.C)
Grundlagen der Programmierung 2 (1.C) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 8. Mai 2007 Listen und Listenfunktionen Listen modellieren Folgen von gleichartigen,
MehrProgrammieren 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
MehrPraktische 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
MehrGrundlagen 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;
MehrTyp-Polymorphismus. November 12, 2014
Typ-Polymorphismus Universität Bielefeld AG Praktische Informatik November 12, 2014 Das Haskell Typ-System Wir beginnen mit einer Wiederholung des Bekannten: In allen Programmiersprachen sind Typ-Konzepte
MehrBasiskonstrukte 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
MehrProgrammierung und Modellierung
Programmierung und Modellierung Typüberprüfung und Typinferenz Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 5 Typüberprüfung und Typinferenz 1. Typaussagen 2. Typisierungsaxiome
MehrListen 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
MehrPraktikum Funktionale Programmierung Teil 2: Typecheck und Transformation
Praktikum Funktionale Programmierung Teil 2: Typecheck und Transformation Dr. David Sabel Sommersemester 2015 Stand der Folien: SoSe 2015 Übersicht FP-PR Teil 2: Typecheck und Transformation Sommersemester
MehrKapitel 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
MehrGrundlagen 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;
MehrHaskell. Grundlagen der Programmierung 2. Grundlagen der Programmierung 2 (1.A) Bücher, Literatur, URLs. Haskell. Einführung
Grundlagen der Programmierung 2 Grundlagen der Programmierung 2 (1.A) Einführung Prof. Dr Manfred Schmidt-Schauß Sommersemester 2014 Geplanter Inhalt der ersten Hälfte: Programmieren in Definitionen; Rekursion
MehrGrundlagen 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;
MehrÜbersicht. Einführung in die Funktionale Programmierung: Übersicht: Expression und Typen. Ziele des Kapitels
Übersicht Einführung in die Funktionale Programmierung: Typisierung Prof Dr. Manfred Schmidt-Schauß 1 Motivation 2 Typen: Sprechweisen, Notationen und Unifikation 3 Typisierungsverfahren Iteratives Typisierungsverfahren
MehrGrundlagen der Programmierung 2 A (Listen)
Grundlagen der Programmierung 2 A (Listen) Haskell: Listen Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Listen und Listenfunktionen Listen modellieren Folgen von gleichartigen, gleichgetypten Objekten.
MehrGrundlagen der Programmierung 2
Grundlagen der Programmierung 2 Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 15. April 2009 Grundlagen der Programmierung 2: Geplanter Inhalt der zweiten Hälfte rekursives
MehrVerarbeitung 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 =
MehrReelle Zahlen. Einzelzeichen. Bereiche. Aufzählungen. direkt zusammengesetzte Datentypen. einfache Datentypen: Zusammenfassung. kartesisches Produkt
Werte Studiengang Informatik Universität Bremen Sommersemester 2006 (Vorlesung am 8. Mai 2006) Werte / Daten einfach direkt zusammengesetzt rekursiv zusammengesetzt Einfache Datentypen eingabaut Wahrheitswerte
MehrÜ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
MehrVorsemesterkurs Informatik
Vorsemesterkurs Informatik Sommersemester 2011 Grundlagen der Programmierung in Haskell SoSe 2011 Stand der Folien: 30. März 2011 Übersicht 1 Ausdrücke und Typen 2 Funktionen 3 Rekursion Vorkurs Informatik
MehrTypen und Typcheck. Kapitel Typsysteme, Typüberprüfung
Kapitel 4 Typen und Typcheck 4.1 Typsysteme, Typüberprüfung Wir haben bisher algebraische Datentypen in KFPT, Erweiterungen von KFPT und Haskell kennengelernt, und gesehen, dass es in KFPT dynamische Typfehler
MehrGrundlagen 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
MehrProgrammiersprachen: 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 =
MehrPolymorphie 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
MehrHaskell. Grundlagen der Programmierung 2. Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte. Prof. Dr. Manfred Schmidt-Schauß
Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte Grundlagen der Programmierung 2 Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 17. April 2013 rekursives
MehrProgrammieren 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
MehrInformatik I - Programmierung Globalübung Hugs98 Currying. Hugs98 Currying
Informatik I - Programmierung Globalübung 13.01.2003 Hugs98 Currying Thomas Weiler Fachgruppe Informatik RWTH Aachen T. Weiler, RWTH Aachen - 1 - Hugs98 Currying Bedienung Typen Fehlermeldungen Inhalt
MehrProgrammieren 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
MehrGrundlagen der Programmierung 2 (1.A)
Grundlagen der Programmierung 2 (1.A) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 20. April 2006 Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte
MehrEinfü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,
MehrAbstraktion mittels Polymorphie und Funktionen höherer Ordnung. Abschnitt 3.3. Polymorphie und Funktionen höherer Ordnung. Unterabschnitt 3.3.
Abschnitt 3.3 Abstraktion mittels Polymorphie und Funktionen höherer Ordnung Überblick: Polymorphie und Funktionen höherer Ordnung Grundbegriffe der Typisierung Polymorphie als Abstraktionsmittel Typsysteme
MehrPraktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom : Funktionen Höherer Ordnung II und Effizienzaspekte
16:02:08 2017-01-17 1 [34] Praktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom 22.11.2016: Funktionen Höherer Ordnung II und Effizienzaspekte Christoph Lüth Universität Bremen Wintersemester
MehrGrundprinzipien 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
MehrVorlesung 6: Zum Typsystem von Haskell
Praktische Informatik 3 Funktionale Programmierung WiSe 2010/11, Universität Bremen Dennis Walter, DFKI Bremen Revision 1267 vom 2010-12-14 Vorlesung 6: Zum Typsystem von Haskell 1 Motivation Typen erlauben
MehrWas 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ÜBERPRÜFUNG VON TYPEN
5. Kapitel ÜBERPRÜFUNG VON TYPEN Compilerbau Prof. Dr. Wolfgang Schramm Typüberprüfung 1 Was ist wird überprüft? Ob Operatoren und Operanden verträglich (kompatibel) sind. Welche Programmelemente haben
MehrBeschreibung 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" ++
MehrGrundlagen der Programmierung 2
Grundlagen der Programmierung 2 Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 14. April 2011 Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte rekursives
Mehr1. 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
MehrAlgorithmen und Datenstrukturen I
Algorithmen und Datenstrukturen I Einführung in Haskell (I) D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Winter 2009/10, 12. Oktober
MehrTag 3. Funktionen. Num erfüllen, haben wir... ja, was nun eigentlich? Bei
Tag 3 Funktionen Heute werden wir den wichtigsten Typ (oder die wichtigste Klasse von Typen) in Haskell überhaupt genau unter die Lupe nehmen: Funktionen, die wir ansatzweise schon am letzten Tag kennengelernt
MehrProgrammieren 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
MehrProgrammieren in Haskell
Programmieren in Haskell Syntax und Semantik von Haskell Programmieren in Haskell 1 Was wir heute (und nächstes mal) machen Datentypdefinitionen Wertdefinitionen, Variablenbindungen Musterbindungen Funktionsbindungen
MehrSoftwaretechnik. Funktionale Programmierung. Christian Lindig. 23. Januar 2006. Lehrstuhl für Softwaretechnik Universität des Saarlandes
Softwaretechnik Funktionale Programmierung Christian Lindig Lehrstuhl für Softwaretechnik Universität des Saarlandes 23. Januar 2006 Quicksort in Java static void sort(int a[], int lo0, int hi0) { int
MehrHaskell for Hackers... or why functional programming matters
... or why functional programming matters Franz Pletz CCC München 27-06-2009 @ GPN8 Fahrplan Ablauf Motivation 1 Ablauf Motivation 2 3 4 Ablauf Ablauf Motivation bei Fragen/Unklarheiten:
MehrBeweise 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
MehrAlgorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur -
Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur - Punkte: A1: 30, A2: 20, A3: 20, A4: 20, A5: 10, A6: 20 Punkte: /120 12.02.2012 Hinweis: Geben Sie bei allen
MehrProgrammieren in Haskell
Programmieren in Haskell Syntax und Semantik von Haskell Programmieren in Haskell 1 Was wir heute (und nächstes mal) machen Datentypdefinitionen Wertdefinitionen, Variablenbindungen Musterbindungen Funktionsbindungen
MehrEinführung in Haskell
Einführung in Haskell Axel Stronzik 21. April 2008 1 / 43 Inhaltsverzeichnis 1 Allgemeines 2 / 43 Inhaltsverzeichnis 1 Allgemeines 2 Funktions- und Typdefinitionen 2 / 43 Inhaltsverzeichnis 1 Allgemeines
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel
MehrFunktionale Programmierung
Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 2 Teil II Typen mit Werten und Ausdruck, sogar listenweise 3 Haskell Programme Programm Module ein
MehrWS 2011/2012. Robert Giegerich Dezember 2013
WS 2011/2012 Robert 1 AG Praktische Informatik 11. Dezember 2013 1 robert@techfak.uni-bielefeld.de Vorschau Themen heute: Funktionen höherer Ordnung (Fortsetzung) künstliche Striktheit mehr zu fold für
MehrPrü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
MehrParadigmen 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)]
MehrBeispiele: 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
MehrEscher funktionale und logische Programmierung
Escher funktionale und logische Programmierung Seminar Programming Languages From Hell Lars Hupel 2010-06-07 Dieses Werk ist lizenziert unter den Bedingungen der Creative Commons Namensnennung 3.0 Deutschland.
MehrTypklassen 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:
MehrProgrammierung 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
MehrFunktionale Programmierung mit Haskell. Jan Hermanns
Funktionale Programmierung mit Haskell Jan Hermanns 1 Programmiersprachen imperativ deklarativ konventionell OO logisch funktional Fortran Smalltalk Prolog Lisp C Eiffel ML Pascal Java Haskell 2 von Neumann
Mehr9 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
MehrPraktische Informatik 3: Funktionale Programmierung Vorlesung 2 vom : Funktionen und Datentypen
Rev. 1843 1 [35] Praktische Informatik 3: Funktionale Programmierung Vorlesung 2 vom 23.10.2012: Funktionen und Datentypen Christoph Lüth Universität Bremen Wintersemester 2012/13 2 [35] Fahrplan Teil
MehrWS 2011/2012. Georg Sauthoff November 2011
WS 2011/2012 Georg 1 AG Praktische Informatik 22. November 2011 1 gsauthof@techfak.uni-bielefeld.de Vorstellung der abgaben aus den Tutorien. Sieb-Beispiel Siehe Tafel (Auswertungsbeispiel) Sieb-Beispiel
MehrPrü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
Mehr4.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
MehrFunktionale Programmierung
Grundlagen der funktionalen Programmierung II LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 7. Mai 2009 Aus Grundlagen I Terminänderung: Vorlesung am Mo
MehrWS 2011/2012. Robert Giegerich. October 30, 2013
WS 2011/2012 Robert AG Praktische Informatik October 30, 2013 Algebraische Datentypen Neue Datentypen werden als algebraische Datentypen eingeführt. Werte des Datentyps sind Formeln, die aus Konstruktoren
MehrFunktionale Programmierung und Typtheorie
Funktionale Programmierung und Typtheorie 5. Fortgeschrittene Konzepte 5.1 Komprehensionen 5.2 Partielle Applikationen 5.3 Strikte und nichtstrikte Funktionen 5.4 Unendliche Datenstrukturen und verzögerte
MehrVorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 5A. Lösung zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler)
Fachbereich Informatik und Mathematik Institut für Informatik Vorsemesterkurs Informatik Sommersemester 2017 Aufgabenblatt Nr. 5A zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler) Laden Sie von der
Mehr