Programmieren in Haskell Das Haskell Typsystem
|
|
- Bernd Adenauer
- vor 6 Jahren
- Abrufe
Transkript
1 Programmieren in Haskell Das Haskell Typsystem Peter Steffen Robert Giegerich Universität Bielefeld Technische Fakultät Programmieren in Haskell
2 Belauscht... Lisa Lista: Ohne Typen keine korrekten Programme! Harry Hacker: Ach was! Korrekte Programme brauchen keine Typen! Wer hat recht? 2 Programmieren in Haskell
3 Einfache Datentypen (vordefiniert) Die einfachsten Datentypen: Bool (), genannt Void Char Int, Integer Rational, Float, Double Int -> Int, Int -> Musik -> Musik, etc. In einer funktionalen Sprache sind auch Funktionen Daten erster Klasse sie können nicht nur auf Argumente angewandt werden, sondern auch in Datenstrukturen verpackt, als Argumente übergeben, oder zu neuen Funktionen zusamengesetzt werden, also Ergebnisse sein. Nur Vergleichen (EQ) und Ausdrucken (Show) kann man sie nicht. 3 Programmieren in Haskell
4 Algebraische Datentypen Algebraische Datentypen werden durch Konstruktoren gebildet. Eigentlich stellen sie die Formeln dar, mit denen dann gerechnet wird. Musik (mit Konstruktoren Instr, Tempo, Note, Pause, *, +) Bool (mit Konstruktoren True, False) Ordering (mit Konstruktoren LT, EQ, GT) Von diesen Beispielen ist nur Musik ein rekursiver Datentyp, der beliebig viele (und aus viele Teilen zusammengesetzte) Werte enthält. 4 Programmieren in Haskell
5 Monomorphe Listen Listen mit Elementen vom Typ Int: data Intlist = IntNil IntCons Int IntList Einwände: Das ist wenig nützlich für jeden weiteren Element-Datentyp muss man einen neuen Listentyp einführen. (In manchen Programmiersprachen ist das tatsächlich so!) Viele Operationen mit Listen hängen nicht vom Elementtyp ab die möchte man nur einmal programmieren! 5 Programmieren in Haskell
6 Das Haskell-Typkonzept ist so stark, dass Typ-korrrekte Proramme oft auch schon korrekt sind. Das liegt am parametrischen Typ-Polymorphismus. Typen werden dadurch flexibler, aber weiter gilt der alte Grundsatz: Ein typ-korrektes Programm erzeugt zur Laufzeit keine Typfehler. oder auch Well-typed programs don t go wrong. 6 Programmieren in Haskell
7 Haskell erlaubt parametrisierte Typen: data [a] = [] a:[a] -- polymorphe Listen -- beachte: alle Elemente haben den gleichen Typ data Tree a = Leaf a Br (Tree a) (Tree a) data TTree a b = Leaf a Br (Tree b a) [a] (Tree b a) -- hier wechseln die Typen pro Ebene, -- aber streng kontrolliert f g :: [a] -> [a] :: Tree a -> [a] 7 Programmieren in Haskell
8 Typdeklarationen Typdeklarationen in Haskell sind optional. Sie dienen der Dokumentation der bewußten Einschränkung des Typs (enger als nötig), z.b. reversi:: [Int] -> [Int] reversi xs = reverse xs wenn man möchte, dass reversi NUR auf Int-Listen angewandt werden kann. Auch ohne Typdeklarationen können alle Typen bestimmt und geprüft werden. 8 Programmieren in Haskell
9 Typinferenz Grundlegendes zur Typinferenz: Jeder Ausdruck in einem Haskell-Programm hat einen allgemeinsten Typ. Dieser Typ kann automatisch bestimmt werden durch Typinferenz. Beim Rechnen spielen die Typen keine Rolle (mehr). Meistens stimmt der inferierte Typ mit dem deklarierten (sofern vorhanden) überein. Andernfalls gilt: Der deklarierte Typ ist allgemeiner: FEHLER Der deklarierte Typ ist spezieller: Der allgemeine Typ wird entsprechend eingeschränkt. DieTypen sind unvergleichbar: FEHLER 9 Programmieren in Haskell
10 Allgemeiner und spezieller... a -- der allgemeinste Typ, den es gibt -- (a ist beliebige Typvariable) a -> b -- der allgemeinste Funktionstyp, den es gibt Ein Typ ist spezieller als ein anderer, wenn er aus ihm durch (konsistentes) Einsetzen für Typvariablen entsteht. Hier eine Kette von Spezialisierungen: a ==> b ==> (a -> b) => a -> (c -> d) ==> a -> b -> b ==> a -> [a] -> [a] -- das ist der Typ von (:) ==> Tree b -> [Tree b] -> [Tree b] -- (:) in einer Anwendung 10 Programmieren in Haskell
11 Beispiele zur Typinferenz Der Typ einer polymorphen Funktion spezialsiert sich in der Anwendung: (:) :: a -> [a] -> [a] ( a :"braham") :: [Char] (: "xx") :: Char -> [Char] ( x :) :: [Char] -> [Char] ("x":) :: [[Char]] -> [[Char]] Hugs> :type (: a ) ERROR - Type error in application *** Expression : (: a ) *** Term : (:) *** Type : b -> [b] -> [b] *** Does not match : a -> Char -> [b] Scheitert die Typinferenz, liegt ein Fehler vor. 11 Programmieren in Haskell
12 Typinferenz für map Wir gehen von der Definition aus: map f [] = [] map f (x:xs) = f x : map f xs ermittelter Typ Begründung c -> d -> e -- map hat 2 Argumente c -> d -> [b] -- das Ergebnis ist eine Liste c -> [a] -> [b] -- das 2. Argument ist eine Liste (f -> g) -> [a] -> [b] -- das 1.Argument ist eine Funktion, (a -> g) -> [a] -> [b] -- die Argumente vom Typ a erhält, (a -> b) -> [a] -> [b] -- und Ergebnisse vom Typ b liefert. Den allgemeinsten Typ erhalten wir, weil wir nirgendwo eine unnötige Annahme machen. 12 Programmieren in Haskell
13 Typinferenz eines Audrucks Wir gehen von bereits bekannten Typen für Zahlen und vordefinierte Funktionen aus und leiten eine Typaussage für einen Ausdruck ab: map (1:)::h -- der Ausdruck hat einen Typ map:: (a -> b) -> [a] -> [b] -- bereits bekannt (:):: c -> [c] -> [c] -- bereits bekannt 1::Int -- bereits bekannt c == Int -- 1 erstes Argument von (:) (:):: Int -> [Int] -> [Int] -- Typ von (:) in diesem Kontext (1:):: [Int] -> [Int] -- (:) angewandt aufs erste Argument -- bleibt eine Funktion des zweiten 13 Programmieren in Haskell
14 [a] -> [b] == [Int] -> [Int] -- (1:) ist erstes Argument von map a == Int, b == Int -- Konsequenz des vorigen map:: ([Int] -> [Int]) -> [[Int]] -> [[Int]] -- spezieller Typ von -- map in diesem Ausdruck map (1:):: [[Int]] -> ][Int]]-- map angewandt auf erstes Argument -- bleibt eine Funktion des zweiten h == [[Int]] -> [[Int]] -- allgemeinster Typ für map (1:)... und das stimmt überein mit dem, was diese Funktion berechnet: Hugs> map (1:) [[5..9],[20..24],[2,4..8]] [[1,5,6,7,8,9],[1,20,21,22,23,24],[1,2,4,6,8]] 14 Programmieren in Haskell
15 Typinferenz mit In Wirklichkeit ist es noch etwas komplizierter. Man weiss ja nur, dass 1 eine Zahl ist, also der Typklasse NUM angehört. Hugs> :type 1 1 :: Num a => a Hugs> :type (1:) (1 :) :: Num a => [a] -> [a] Hugs> :type map (1:) map (1 :) :: Num a => [[a]] -> [[a]] Hugs> :type map ((1::Integer):) map (1:) :: [[Integer]] -> [[Integer]] Hugs> :type map (1.5:) map (1.5 :) :: Fractional a => [[a]] -> [[a]] 15 Programmieren in Haskell
16 können auf alle Daten angewandt werden, zu deren Typ sich ihr allgemeiner Typ spezialisieren lässt. Vorteil: Kompakter Code, wenig Fehler. 16 Programmieren in Haskell
17 Was sagt ihr Typ über die Funktion? Wir kennen: id :: a -> a ix x = x Welche andere Funktionen gibt es noch von diesem recht allgemeinen Typ, (abgesehen von umständlicheren Definitionen der gleichen Funktion)? Keine. 17 Programmieren in Haskell
18 Was sagt ihr Typ über die Funktion? Wir kennen: id :: a -> a ix x = x Welche andere Funktionen gibt es noch von diesem recht allgemeinen Typ, (abgesehen von umständlicheren Definitionen der gleichen Funktion)? Keine. 17 Programmieren in Haskell
19 Was sagt ihr Typ über die Funktion? (2) Welche Funktion hat den noch allgemeineren Typ f :: a -> b 18 Programmieren in Haskell
20 Was sagt ihr Typ über die Funktion? (2) Welche Funktion hat den noch allgemeineren Typ f :: a -> b Die überall undefinierte Funktion... f :: a -> b f x = f x... und sonst keine. 19 Programmieren in Haskell
21 Fluch der Allgemeinheit Auf der ersten Blick scheint es paradox: Die Funktionen mit den allgemeinsten Typen f:: a -> b f:: a -> a sind die nutzlosesten Funktionen! 20 Programmieren in Haskell
22 höherer Ordnung (1) Was mag das sein: srol:: solution -> (a -> [a] -> solution -> solution)-> [a] -> solution srol base extend = rec where rec [] = base rec (x:xs) = extend x xs (rec xs) 21 Programmieren in Haskell
23 höherer Ordnung (1) Was mag das sein: srol:: solution -> (a -> [a] -> solution -> solution)-> [a] -> solution srol base extend = rec where rec [] = base rec (x:xs) = extend x xs (rec xs) 21 Programmieren in Haskell
24 srol in Worten srol ist eine Funktion, die als Arfumente einen Wert und eine Funktion erwartet. Angewandt auf diese, ergibt sie eine Funktion, die Listen verarbeitet und dabei für die leere Liste den Wert einsetzt, und ansonsten den Listenrest verarbeitet und sodann das Ergebnis abhängig vom Listenkopf modifiziert. Oder anders gesagt: srol ist das SCHEMA der strukturellen Rekursion auf Listen. 22 Programmieren in Haskell
25 srol in Worten srol ist eine Funktion, die als Arfumente einen Wert und eine Funktion erwartet. Angewandt auf diese, ergibt sie eine Funktion, die Listen verarbeitet und dabei für die leere Liste den Wert einsetzt, und ansonsten den Listenrest verarbeitet und sodann das Ergebnis abhängig vom Listenkopf modifiziert. Oder anders gesagt: srol ist das SCHEMA der strukturellen Rekursion auf Listen. 22 Programmieren in Haskell
26 srol angewandt isort = srol [] (\a _ s -> insert a s) insert a = srol [a] (\b x s -> if a <= b then a:b:x else b:s) Man muss sich klarmachen, dass s jeweils die (rekursiv errechnete) Lösung der Aufgabe für x darstellt! 23 Programmieren in Haskell
27 srol Varianten srol bezieht sich explizit auf den Datentyp Liste. Es werden ja die beiden Konstruktoren [] und (:) explizit benutzt. Für andere Datentypen wie Musik oder Tree muss ein eigenes Schema definiert werden. Das wird noch eleganter bei der Wohlfundierten Rekursion! 24 Programmieren in Haskell
28 Schema der Wohlfundierten Rekursion problem steht für den Datentyp, für den wir ein Problem mit Wohlfundierter Rekursion lösen wollen. dac:: (problem -> Bool) -> (problem -> solution) -> (problem -> [problem]) -> ([solution] -> solution) -> problem -> solution -- easy -- solve -- divide -- conquer dac easy solve divide conquer = rec where rec x = if easy x then solve x else conquer [rec y y <- divide x] 25 Programmieren in Haskell
29 Anwendung von dac Implementierung des mergesort: msort = dac (\x -> drop 1 x == []) (\x -> x) (\x -> let k = length x div 2 in [take k x, drop k x] (\[s,t] -> merge s t) Wo ist die Rekursion geblieben? Sie wird vom Scheme dac eingebracht das, worauf merge angewandt wird, ist der msort von (take k x) und (drop k x). 26 Programmieren in Haskell
30 Anwendung von dac Implementierung des mergesort: msort = dac (\x -> drop 1 x == []) (\x -> x) (\x -> let k = length x div 2 in [take k x, drop k x] (\[s,t] -> merge s t) Wo ist die Rekursion geblieben? Sie wird vom Scheme dac eingebracht das, worauf merge angewandt wird, ist der msort von (take k x) und (drop k x). 26 Programmieren in Haskell
31 Schlussfolgerungen Funktionen höherer Ordnung sind ein machtvolles Hilfsmittel: Sie erlauben, beliebige Schemata der Benutzung von funktionellen Bauteilen zu definieren Sie ersetzen das, was man in anderen Sprachen Kontrollstruktur nennt. Sie erlauben dem Programmierer, seine eigenen Kontrollstrukturen zu definieren. Dadurch lassen sich anwendungsbezogene Programmierstile entwickeln Beispiele sind Pretty printing Combinator Parsing Algebraic Dynamic Programming 27 Programmieren in Haskell
32 Eine Typklasse ist eine Menge von Typen. Sie ist charakterisiert durch eine Menge von Funktionen, die auf allen Typen dieser Klasse und mit dem gleichen Namen definiert sind. Diese Funktionen nennt man in diesem Zusammenhang gerne Methoden. Vordefinierte sind Show mit Methoden show, read,... Eq mit Methoden ==, / = Ord mit Methoden <, >,,... Num mit Methoden +,,,... und viele andere. 28 Programmieren in Haskell
33 Neue Neue werden durch Klassendefinitionen eingeführt, die die Typen der Operationen (hier gerne Methoden genannt) deklarieren. Es können auch einige der Methoden als Default definiert werden, indem sie sich gegenseitig benutzen. Wenn ein Typ zur Instanz einer Klasse erklärt wird, müssen die Methoden implementiert werden. 29 Programmieren in Haskell
34 Beispiel: Klasse Sequenzen class Sequence s where empty :: s a single :: a -> s a isempty :: s a -> Bool issingle :: s a -> Bool vorndran :: a -> sa -> s a hintan :: sa -> a -> s a hd :: s a -> a tl :: s a -> s a app :: s a -> s a -> s a len :: s a -> Int single a = vorndran a empty issingle s = not(isempty s) && isempty (tl s) len s = if empty s then 0 else 1 + len (tl s) 30 Programmieren in Haskell
35 Instanziierung Ein Datentyp kann zur Instanz einer Klasse erklärt werden: instance Sequence [] where... instance Tree [] where... Hier müssen jeweils die Methoden implementiert werden. Fehlt eine Implementierung, werden die Defaults aus der Klassendefinition eingesetzt. Diverse Instanziierungen von Sequence findet man im Skript. 31 Programmieren 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
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
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
MehrWas bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen:
Was bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen: Peano-Zahlen, Listen, Bäume Rekursive Funktionen strukturelle
MehrWS 2011/2012. Georg Sauthoff 1. October 18, 2011
in in WS 2011/2012 Georg 1 AG Praktische Informatik October 18, 2011 1 gsauthof@techfak.uni-bielefeld.de Neue Übungsgruppen in neue Übungsgruppen neue Tutoren Sprechstunden in GZI-Arbeitsraum (V2-240)
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
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
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
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
MehrProgrammieren in Haskell
Programmieren in Haskell Felder (Arrays) Programmieren in Haskell 1 Was wir heute machen Motivationsbeispiel Die Typklasse Ix Felder in Haskell Funktionstabellierung Binäre Suche Pascalsches Dreieck Ein
MehrZahlen in Haskell Kapitel 3
Einführung in die Funktionale Programmiersprache Haskell Zahlen in Haskell Kapitel 3 FH Wedel IT-Seminar: WS 2003/04 Dozent: Prof. Dr. Schmidt Autor: Timo Wlecke (wi3309) Vortrag am: 04.11.2003 - Kapitel
Mehrexpr :: Expr expr = Mul (Add (Const 3) (Const 4)) (Div (Sub (Const 73) (Const 37)) (Const 6))
1 - Korrektur 2 - Abstrakte Datentypen für arithmetische Ausdrücke Der Datentyp Wir beginnen zunächst mit dem algebraischen Datentyp für Ausdrücke. Hierfür definieren wir einen Konstruktor Number für Zahlen,
Mehr2.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
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
MehrBeispiele: (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))
MehrTutorium - Haskell in der Schule. Ralf Dorn - Dennis Buchmann - Felix Last - Carl Ambroselli
Tutorium - Haskell in der Schule Wer sind wir? Otto-Nagel-Gymnasium in Berlin-Biesdorf Hochbegabtenförderung und MacBook-Schule Leistungskurse seit 2005 Einführung Was ist funktionale Programmierung? Einführung
MehrTypdeklarationen. Es gibt in Haskell bereits primitive Typen:
Typdeklarationen Es gibt in bereits primitive Typen: Integer: ganze Zahlen, z.b. 1289736781236 Int: ganze Zahlen mit Computerarithmetik, z.b. 123 Double: Fließkommazahlen, z.b. 3.14159 String: Zeichenketten,
MehrFrage, 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
MehrTag 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
MehrPraktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen
Rev. 1152 1 [23] Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen Christoph Lüth & Dennis Walter Universität Bremen Wintersemester 2010/11
MehrFunktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS 2013. Prof. Dr. Margarita Esponda. Prof. Dr.
ALP I Funktionen höherer Ordnung Teil 2 SS 2013 Funktionen höherer Ordnung Nehmen wir an, wir möchten alle Zahlen innerhalb einer Liste miteinander addieren addall:: (Num a) => [a -> a addall [ = 0 addall
MehrVorsicht 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
MehrFunktionale Programmierung
Schleifen 1 Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 3 Teil I Jedem Anfang wohnt ein Zauber inne 4 Über mich Diplom in Informatik in Saarbrücken
MehrHaskell. A Wild Ride. Sven M. Hallberg. sm@khjk.org. 21C3 Berlin / Bildungswerk Hamburg 20.6.2007 p. 1/36
21C3 Berlin / Bildungswerk Hamburg 20.6.2007 p. 1/36 Haskell A Wild Ride Sven M. Hallberg sm@khjk.org 21C3 Berlin / Bildungswerk Hamburg 20.6.2007 p. 2/36 Überblick Vorsichtsmaßnahmen Einführung und Sprachgrundlagen
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2011 I. Die
MehrProgrammieren in Haskell Einführung
Programmieren in Haskell Einführung Peter Steffen Universität Bielefeld Technische Fakultät 16.10.2009 1 Programmieren in Haskell Veranstalter Dr. Peter Steffen Raum: M3-124 Tel.: 0521/106-2906 Email:
MehrAgenda. 1 Einleitung. 2 Binäre Bäume. 3 Binäre Suchbäume. 4 Rose Trees. 5 Zusammenfassung & Ausblick. Haskell Bäume. Einleitung.
Vortrag: Bäume in Haskell Bäume in Haskell Vortrag Christoph Forster Thomas Kresalek Fachhochschule Wedel University of Applied Sciences 27. November 2009 Christoph Forster, Thomas Kresalek 1/53 Vortrag
MehrALP I. Funktionale Programmierung
ALP I Funktionale Programmierung Sortieren und Suchen (Teil 1) WS 2012/2013 Suchen 8 False unsortiert 21 4 16 7 19 11 12 7 1 5 27 3 8 False sortiert 2 4 6 7 9 11 12 18 21 24 27 36 Suchen in unsortierten
MehrPraktische 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
Mehr11 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
MehrWS 2011/2012. Georg Sauthoff 1. November 1, 2011
WS 2011/2012 Georg 1 AG Praktische Informatik November 1, 2011 1 gsauthof@techfak.uni-bielefeld.de Übungen Abgaben und Aufgabenblätter am Ende der Vorlesung Skript gibt es demnächst in den Übungen Der
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2011 I. Die
MehrProgrammieren in Haskell
Programmieren in Haskell Programmieren mit Listen Programmieren in Haskell 1 Was wir heute machen Eigener Listen-Datentyp Eine Sortierfunktion Nützliche Listenfunktionen Programmieren in Haskell 2 Ein
MehrCrashkurs Haskell Mentoring WiSe 2016/17. Anja Wolffgramm Freie Universität Berlin
Crashkurs Haskell Mentoring WiSe 2016/17 Anja Wolffgramm Freie Universität Berlin 02/11/2016 , Inhalt Kommandozeile Haskell installieren & starten Ein 1. Haskell-Programm Funktionsdefinition Primitive
MehrProgrammieren in Haskell. Abstrakte Datentypen
Programmieren in Haskell Abstrakte Datentypen Einführung Man unterscheidet zwei Arten von Datentypen: konkrete Datentypen: beziehen sich auf eine konkrete Repräsentation in der Sprache. Beispiele: Listen,
MehrVorsemesterkurs Informatik
Stand der Folien: 31. März 2011 Vorsemesterkurs Informatik Sommersemester 2011 Grundlagen der Programmierung in Haskell SoSe 2011 Übersicht 1 Ausdrücke und Typen 2 Funktionen 3 Rekursion 4 Listen 5 Paare
MehrProgrammieren in Haskell Felder (Arrays)
Programmieren in Haskell Felder (Arrays) Peter Steffen Universität Bielefeld Technische Fakultät 05.12.2008 1 Programmieren in Haskell Quadratzahlen 0 1 2 3 n 0 1 4 9 n 2 squareslist :: Integral a => [a]
MehrProbeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
MehrDefinieren Sie eine Funktion circlearea zur Berechnung der Fläche eines Kreises mit gegebenen Radius (Float).
Haskell Funktionen Definieren Sie eine Funktion circlearea zur Berechnung der Fläche eines Kreises mit gegebenen Radius (Float). circlearea :: Float -> Float circlearea radius = 2 * pi * radius^2 Definieren
MehrProgrammiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 7. Funktionen Einleitung Nach dem Prinzip Divide and Conquer bietet es sich an, größere Aufgaben in kleinere Teile zu unterteilen. Anweisungsblöcke,
MehrFelder. November 5, 2014
Felder Universität Bielefeld AG Praktische Informatik November 5, 2014 Felder: Datenstrukturen mit konstantem Zugriff Felder nennt man auch, Vektoren, Matrizen,... Konstanter Zugriff heisst: Zugriff auf
Mehr26 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
MehrHaskell zur Constraint-Programmierung HaL8
Haskell zur Constraint-Programmierung HaL8 Alexander Bau 2. Mai 2013 Wir benutzen eine Teilmenge von Haskell zur Spezifikation von Constraint- Systemen über Haskell-Datentypen. Ein Constraint-Compiler
MehrVerträge für die funktionale Programmierung Design und Implementierung
1 Verträge für die funktionale Programmierung Design und Implementierung RALF HINZE Institut für Informatik III, Universität Bonn Römerstraße 164, 53117 Bonn, Germany Email: ralf@informatik.uni-bonn.de
MehrFortgeschrittene Programmierung
Skript zur Vorlesung Fortgeschrittene Programmierung SS 2014 Prof. Dr. Michael Hanus Priv.Doz. Dr. Frank Huch Arbeitsgruppe Programmiersprachen und Übersetzerkonstruktion Institut für Informatik Christian-Albrechts-Universität
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 [] = []
MehrALP I Einführung in Haskell
ALP I Einführung in Haskell WS 2012/2013 Was ist Haskell? Haskell ist eine rein Funktionale Programmiersprache mit einer nach Bedarf Auswertung-Strategie oder "Lazy Evaluation". Was bedeutet rein funktional?
MehrTag 6. Module, benannte Funktionen und Rekursion
Tag 6 Module, benannte Funktionen und Rekursion Wir verlassen nun die abgeschlossene kleine Welt des interaktiven Interpreters und lernen, wie man richtige Haskell-Programme schreibt. Im Interpreter haben
MehrGenerische Record-Kombinatoren mit statischer Typprüfung
System Generische mit statischer Typprüfung Brandenburgische Technische Universität Cottbus Lehrstuhl Programmiersprachen und Compilerbau Lehrstuhlkolloquium am 13. Januar 2010 Überblick System System
MehrFunktionale Programmierung mit C++
Funktionale Programmierung mit C++ Überblick Programmierung in funktionaler Art Warum funktionale Programmierung? Was ist funktionale Programmierung? Charakteristiken funktionaler Programmierung Was fehlt
MehrFormale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen
Was bisher geschah Formale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen Syntax: Signatur Semantik: Axiome (FOL-Formeln, meist
MehrProseminar: Perlen der Informatik II Haskell List comprehensions & Typklassen
Proseminar: Perlen der Informatik II Haskell List comprehensions & Typklassen Dmitriy Traytel 8. Juli 2008 Diese Ausarbeitung im Rahmen des Proseminars Perlen der Informatik II beschäftigt sich mit einigen
MehrEinführung in die funktionale Programmierung
Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 20. November 2006 Monaden und I/O Monade ist ein Datentyp für (sequentielle)
MehrTyp-basiertes Programmieren und Schließen in Funktionalen Sprachen
Typ-basiertes Programmieren und Schließen in Funktionalen Sprachen Jun.-Prof. Janis Voigtländer Institut für Informatik III Universität Bonn WS 2009/10 Organisation Wahlpflichtvorlesung im Diplomstudiengang,
MehrRepetitorium Informatik (Java)
Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen
Mehr3.2 Modellierende Spezifikation von ADT
3.2 Modellierende Spezifikation von ADT Wie kann ich das Verhalten der Operationen eines ADO spezifizieren, wenn ich mich wegen der Datenabstraktion nicht auf seine Daten beziehen kann? 2 Alternativen:
MehrII. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:
Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen
MehrEinfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at
Inhalt SWP Funktionale Programme (2. Teil) Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at Interpreter für funktionale Sprache
MehrKapitel 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
Mehr1 Polymorphie (Vielgestaltigkeit)
1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen
MehrFunktionale Programmiersprachen
Funktionale Programmiersprachen An den Beispielen Haskell und Erlang Übersicht Programmiersprachen λ-kalkül Syntax, Definitionen Besonderheiten von funktionalen Programmiersprache, bzw. Haskell Objektorientierte
MehrVorlesung Datenstrukturen
Vorlesung Datenstrukturen Binärbaum Suchbaum Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 356 Datenstruktur Binärbaum Strukturrepräsentation des mathematischen Konzepts Binärbaum
MehrTypklassen, Eingabe und Monaden In Haskell
Typklassen, Eingabe und Monaden In Haskell Felix Rahmati Jonathan Beierle 1 Einleitung In dieser Ausarbeitung befassen wir uns mit den Vorteilen einiger fortgeschrittener Konzepte der funktionalen Programmierung
MehrFunktionen höherer Ordnung
Eine Funktion wird als Funktion höherer Ordnung bezeichnet, wenn Funktionen als Argumente verwendet werden, oder wenn eine Funktion als Ergebnis zurück gegeben wird. Beispiel: twotimes :: ( a -> a ) ->
MehrEinführung in die Programmierung
Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In
Mehr5.4 Klassen und Objekte
5.4 Klassen und Objekte Zusammenfassung: Projekt Figuren und Zeichner Figuren stellt Basisklassen für geometrische Figuren zur Verfügung Zeichner bietet eine übergeordnete Klasse Zeichner, welche die Dienstleistungen
MehrPass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl
Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt
MehrTutoraufgabe 1 (Datenstrukturen in Haskell):
Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Allgemeine Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung (Tutorium)
MehrAlgorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 1 -
Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 1 - Dozent: Prof. Dr. G. Rote Tutoren: J. Fleischer, T. Haimberger, N. Lehmann, C. Pockrandt, A. Steen 18.10.2011 Ziele
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
MehrProgrammtransformationen und Induktion in funktionalen Programmen
Programmtransformationen und Induktion in funktionalen Programmen Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 13. Januar 2009 Einschub: Monadisches IO verzögern Implementierung
MehrFunktionale Programmierung. ALP I Lambda-Kalkül. Teil IVb WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda
ALP I Lambda-Kalkül Teil IVb WS 2012/2013 λ-kalkül-parser Hilfsfunktionen: Die break-funktion ist eine Funktion höherer Ordnung, die eine Liste beim ersten Vorkommen einer Bedingung in zwei Listen spaltet.
MehrGebundene Typparameter
Gebundene Typparameter interface StringHashable { String hashcode(); class StringHashMap { public void put (Key k, Value v) { String hash = k.hashcode();...... Objektorientierte
Mehrzu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
MehrC.3 Funktionen und Prozeduren
C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens
MehrWelche Informatik-Kenntnisse bringen Sie mit?
Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt
MehrÜbung Datenstrukturen. Objektorientierung in C++
Übung Datenstrukturen Objektorientierung in C++ Aufgabe 1a - Farben Schreiben Sie eine Klasse COLOR zur Beschreibung von Farben. Eine Farbe werde hierbei additiv durch ihren Rot-, Grün- und Blauanteil
MehrTheorie zu Übung 8 Implementierung in Java
Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept
MehrAssoziative Container in C++ Christian Poulter
Assoziative Container in C++ Christian Poulter Seminar: Die Sprache C++ Mat-Nr.: 53 03 129 EMail: inf@poulter.de Christian Poulter Assoziative Container in C++ Seite 1/10 Inhalt 1. Einleitung: Container...
MehrJava Kurs für Anfänger Einheit 4 Klassen und Objekte
Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse
MehrCGI Programmierung mit Ha. Markus Schwarz
CGI Programmierung mit Ha Markus Schwarz Überblick Was ist funktionale Programmierung Einführung in Haskell CGI-Programmierung mit Haskell Ein etwas größeres Beispiel Was ist funktionale Programm Ein Programm
MehrProbeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
MehrAdvanced Programming in C
Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer
MehrAdressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine. Studienleistung
Adressen Adressen, Termine Studienleistung Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Büro und Email Raum 216, Robert-Mayer-Str. 11-15 sabel@ki.informatik.uni-frankfurt.de
MehrProseminar Funktionales Programmieren. Stephan Kreutzer
Proseminar Funktionales Programmieren Die Programmiersprache LISP Stephan Kreutzer Teil I: Funktionales Programmieren Imperative Sprachen Imperative Sprachen: Befehlsorientiert Imperative Sprachen orientieren
MehrII.3.1 Rekursive Algorithmen - 1 -
1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.3.1 Rekursive Algorithmen -
MehrRO-Tutorien 3 / 6 / 12
RO-Tutorien 3 / 6 / 12 Tutorien zur Vorlesung Rechnerorganisation Christian A. Mandery WOCHE 2 AM 06./07.05.2013 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft
MehrUm nicht immer den Strukturnamen verwenden zu müssen, kann man auch alle Definitionen einer Struktur auf einmal sichtbar machen:
Öffnen von Strukturen Um nicht immer den Strukturnamen verwenden zu müssen, kann man auch alle Definitionen einer Struktur auf einmal sichtbar machen: open P a i r s ; opening Pairs type a Pair = a * a
Mehr1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)
Praktische Informatik (Software) Vorlesung Softwareentwicklung 1 Prof. Dr. A. Ferscha Hauptklausur am 01. 02. 2001 Zuname Vorname Matr. Nr. Stud. Kennz. Sitzplatz HS / / / Punkte Note korr. Fügen Sie fehlende
MehrAllgemeine 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,
MehrFunktionale Programmierung mit C++
Funktionale Programmierung mit C++ Rainer Grimm Softwarearchitekt Partner: Überblick Programmierung in funktionaler Art Warum funktionale Programmierung? Was ist funktionale Programmierung? Charakteristiken
MehrObjektorientierte Programmierung
Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum
MehrProgrammierung mit C Zeiger
Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch
Mehrzu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
MehrJava 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8
Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen
Mehr1.2 Attribute und Methoden Aufbau einer Java-Klasse:
Aufbau einer Java-Klasse: public class Quadrat { int groesse; int xposition; String farbe; boolean istsichtbar; public void sichtbarmachen() { istsichtbar = true; public void horizontalbewegen(int distance){
MehrFrage: Gibt es Dinge die wir nur in anderen Sprachen berechnen können? Was kann man wirklich mit dem λ-kalkül ausdrücken?
3 Der λ-kalkül Ausdruckskraft des λ-kalküls 3.7 3.7 Ausdruckskraft des λ-kalküls Frage: Gibt es Dinge die wir nur in anderen Sprachen berechnen können? Was kann man wirklich mit dem λ-kalkül ausdrücken?
MehrDeklarationen in C. Prof. Dr. Margarita Esponda
Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.
MehrJava Einführung VARIABLEN und DATENTYPEN Kapitel 2
Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2011 I. Die
Mehr