Funktionen höherer Ordnung. 3. Dezember 2014
|
|
- Martha Ursler
- vor 6 Jahren
- Abrufe
Transkript
1 höherer Ordnung Universität Bielefeld AG Praktische Informatik 3. Dezember 2014
2 höherer Ordnung Worum geht es heute? In Haskell gibt es, die als Argument haben oder als Ergebnis liefern. Diese nennt man höherer Ordnung. Davon kennen wir bisher Beispiele wie map oder (.) Was man insgesamt damit machen kann, ist damit noch lange nicht erschöpft...
3 als Bürger erster Klasse definieren kann man in jeder Programmiersprache. Eine funktionale Programmiersprache erlaubt auch in Datenstrukturen, z.b. [(+), (-), (*)] als Argmente, z.b. map square [1..100] als Ergebnisse, z.b. f. g
4 Wie entstehen? Benannte werden vom Programmierer definiert. Unbenannte (engl. anonymous functions) entstehen durch teilweise Anwendung benannter, z.b. (3+), ( div 2), ("niemals"++) map reverse Note ce ( Note (1/4)) map (1) all_equal 3 4 (Natürlich kann man diesen anonymen dann auch Namen geben startnie = ("niemals"++)) durch Verknüpfung von, z.b. reverse. concat oder durch...
5 Abstraktion Abstraktion verwandelt einen Ausdruck in eine Funktion 3 a b ist ein Ausdruck λa b 3 a b ist eine Funktion von a und b (λa b 3 a b 2 + 5)(2, 3) ist eine Funktionsanwendung und berechnet den Wert 2 Abstraktion Vom konkreten zum Allgemeinen Dur3Klang cdur3kl = Note ce (1/4) + Note eh (1/4) + Note ge (1/4) versus dur3kl = \(t,d) -> Note t d + Note (t+4) d + Note (t+7) d Auf der rechten Seite der Gleichung steht eine anonyme Funktion (die links einen Namen bekommt)
6 Man nennt sie... Abstractions Ausdrücke Anonyme
7 Man nennt sie... Example Abstractions Ausdrücke Anonyme 1 (\a b c-> b^2-4*a*c) map (\x -> x^2 + 1) [1..10] 3 filter (\ x - > x mod 5 == 0) [ ] 4 map (\(x,y) -> x+y) ( zip [1..10] [1..10])
8 Syntax Ausdruck Einfache und allgemeine Form λx 1... x n expr (1) λpat 1... pat n expr (2)
9 Syntax Ausdruck Einfache und allgemeine Form Bzw λx 1... x n expr (1) λpat 1... pat n expr (2) 1 \x1... xn -> expr 2 \ pat1... patn -> expr definiert eine anonyme, n-stellige Funktion.
10 Syntax Ausdruck Einfache und allgemeine Form Bzw λx 1... x n expr (1) λpat 1... pat n expr (2) 1 \x1... xn -> expr 2 \ pat1... patn -> expr definiert eine anonyme, n-stellige Funktion. Wichtig Ausdruck ist ein Ausdruck, sein Wert eine Funktion. Er kann überall stehen, wo Ausdrücke erlaubt sind, z.b. als Argument einer Funktion/ eines Ausdrucks
11 Wiederholung Pattern/Muster Pattern sind Ausdrücke bestehend aus natürlichen Zahlen Werten Variablen Datentyp-Konstruktoren Wildcard-Symbol _ aber ohne!! ( mit Ausnahme des Musters n + 1)
12 Patterns Patterns erlauben pattern matching auf der linken Seite auch in anonymen. Muster von mehrstelligen Konstruktoren müssen geklammert werden Example 1 (\( xxs) -> x) [4,3,2]
13 Currying 1-stellige versus n-stellige n-stellige lassen sich stets als 1-stellige auffassen. Man nennt sie dann curried oder auf Deutsch curryfiziert (nach Haskell B. Curry) geschönfinkelt (nach Moses Schönfinkel) gestaffelt
14 Currying 1-stellige versus n-stellige n-stellige lassen sich stets als 1-stellige auffassen. Man nennt sie dann curried oder auf Deutsch curryfiziert (nach Haskell B. Curry) geschönfinkelt (nach Moses Schönfinkel) gestaffelt Sichtweise λpat 1 pat 2... pat n expr (3) λpat 1 λpat 2... λpat n expr (4)
15 Currying 1-stellige versus n-stellige n-stellige lassen sich stets als 1-stellige auffassen. Man nennt sie dann curried oder auf Deutsch curryfiziert (nach Haskell B. Curry) geschönfinkelt (nach Moses Schönfinkel) gestaffelt Sichtweise λpat 1 pat 2... pat n expr (3) λpat 1 λpat 2... λpat n expr (4) Bzw (λpat 1 (λpat 2... (λpat n expr))) (5)
16 Beispiel sechsmal die gleiche Funktion Example 1 > add I n t > I n t > I n t 2 > add x y = x + y 3 4 > add I n t > ( I n t > I n t ) 5 > add x y = x + y 6 7 > add I n t > ( I n t > I n t ) 8 > add x = \ y > x + y 9 10 > add I n t > ( I n t > I n t ) 11 > add = \x y > x + y > add I n t > ( I n t > I n t ) 14 > add = \x > \y > x + y > add I n t > I n t > I n t 17 > add = \x > \y > x + y
17 Beispiele Typen Was meint GHCi?
18 Currying die verschiedenen Versionen von add haben den gleichen Typ Denn -> (function type constructor) ist rechtsassoziativ in Haskell
19 Currying die verschiedenen Versionen von add haben den gleichen Typ Denn -> (function type constructor) ist rechtsassoziativ in Haskell Sichtweise Das zweistellige add ist eine einstellige Funktion, die eine einstellige Funktion als Ergebnis hat
20 Partielle Anwendung ohne Lambda Example 1 (1+) 2 map (1+) [2,3,4]
21 Kein Curry? Example 1 f (a, b) = a + b
22 Kein Curry? Example 1 f (a, b) = a + b Ausweg 1 curry ((a, b) -> c) -> a -> b -> c 2 curry f x y = f ( x, y)
23 Kein Curry? Example 1 f (a, b) = a + b Ausweg 1 curry ((a, b) -> c) -> a -> b -> c 2 curry f x y = f ( x, y) Zuviel Curry? 1 uncurry (a -> b -> c) -> ((a, b) -> c) 2 uncurry f p = f ( fst p) ( snd p)
24 Fazit Currying In Haskell Nomen est omen sind per-default gestaffelt Staffelung vermeidbar via Tupel Funktions-Typkonstruktor (->) ist rechtsassoziativ -Anwendung ist linksassoziativ f a b ist das gleiche wie (f a) b
25 Fazit Currying In Haskell Nomen est omen sind per-default gestaffelt Staffelung vermeidbar via Tupel Funktions-Typkonstruktor (->) ist rechtsassoziativ -Anwendung ist linksassoziativ f a b ist das gleiche wie (f a) b So gesehen ist jede mehrstellige Funktion eine Higher-Order-Function.
26 höherer Ordnung mit als Parameter mit als Rückgabewert In Haskell
27 höherer Ordnung mit als Parameter mit als Rückgabewert In Haskell als 1st class citizens sind oft von höherer Ordnung höherer Ordnung sind Kontrollstrukturen, die man (im Unterschied zu imperativen Sprachen) selbst definieren kann
28 Wiederholung Bekannte Beispiele für höherer Ordnung 1 map (a->b) -> [a] -> [b] 2 map f [] = [] 3 map f ( x xs) = f x map f xs 4 5 filter (a -> Bool ) -> [a] -> [a] 6 filter p xs = [ x x <- xs, p x]
29 Wiederholung A&D Strukturelle Rekursion Srukturelle Rekursion auf Listen Schema f [σ] -> τ f [] = e 1 f (a as) = e 2 where s = f as wobei e 1 und e 2 Ausdrücke vom Typ τ sind und e 2 die Variablen a, as und s (nicht aber f ) enthalten darf.
30 Beispiele length sum prod and Alle folgen dem gleichen Schema wie z.b. 1 and [] = True 2 and (xxs) = x && ( and xs) Funktion Terminierungs- Anwendung Akkumulation wert (e1) auf x (e2) des Ergebnisses (e2) length sum 0 x + prod 1 x * and True x &&
31 Schema für diese Art der strukturellen Rekursion in Haskell 1 foldr steht für fold right 2 foldr (a -> b -> b) -> b -> [a] -> b 3 foldr _ e [] = e 4 foldr f e (xxs) = f x ( foldr f e xs) 5 6 sum = foldr (+) 0 7 prod = foldr (*) 1 8 and = foldr (&&) True 9 or = foldr ( ) False 10 length = foldr (\ a b - > 1 + b) 0
32 Noch mehr Beispiele mit foldr...? 1 x ++ y = foldr () y x 2 concat = foldr (++) []
33 foldr sum aus der Vogelperspektive foldr f e ersetzt alle durch f und [] durch e. Example [1..5] = [1,2,3,4,5] = 12345[]
34 foldr sum aus der Vogelperspektive foldr f e ersetzt alle durch f und [] durch e. Example [1..5] = [1,2,3,4,5] = 12345[] []
35 foldr sum aus der Vogelperspektive foldr f e ersetzt alle durch f und [] durch e. Example [1..5] = [1,2,3,4,5] = 12345[] foldr (+) [] 5 0
36 foldr prod aus der Vogelperspektive []
37 foldr prod aus der Vogelperspektive [] 5 1
38 foldr prod aus der Vogelperspektive [] 5 1 (1 (2 (3 (4 (5 1))))) = 120
39 foldr length []
40 foldr length [] 1 0
41 foldr length [] 1 0 (1 + (1 + (1 + (1 + (1 + 0))))) = 5
42 Rechenstrategie Vogelperspektive Vogelperspektive bzgl. f bedeutet Rechne so viel (und NUR so viel) bis alle Auftreten von f verschwunden sind. das ist i.a. werder inner- noch outermost aber auf jeden Fall mathematisch korrekt. Dient nicht dem wirklichen Rechnen, aber dem Programmverstehen.
43 foldr klammert von rechts... 1 length " acbde " => (1+(1+(1+(1+(1+0))))) 2 and [True, False, True ] => 3 True && ( False && ( True && False ))... geht s auch von links her?
44 foldl f 5 f 4 f 3 f 2 f 1 e foldl [] foldr f f f f f e
45 foldl-definition 1 foldl (b -> a -> b) -> b -> [a] -> b 2 foldl _ e [] = e 3 foldl f e (xxs) = foldl f (f e x) xs Der Endwert e ist jetzt ein Startwert.
46 Unterschiede foldl, foldr Unterschiedliche Faltung foldr klammert rechtsassoziativ ((a 1 (a 2 (a 3... (a n e))))) (6)
47 Unterschiede foldl, foldr Unterschiedliche Faltung foldr klammert rechtsassoziativ ((a 1 (a 2 (a 3... (a n e))))) (6) foldl klammert linksassoziativ (((((e a 1 ) a 2 ) a 3 )...) a n ) (7) die Faltung von foldr entspricht der Datentypdefinition ggf. Platzbedarf besser bei foldl
48 Unterschiede foldl, foldr Eigenschaft 1 foldr f e ( reverse x) = foldl ( flip f) e x
49 Unterschiede foldl, foldr Eigenschaft 1 foldr f e ( reverse x) = foldl ( flip f) e x Beispiel siehe Tafel.
50 foldl Beispiele sum = foldl (+) 0 or = foldl ( ) False concat = foldl (++) []...
51 Fold im Allgemeinen Fold-Operationen verarbeiten rekursive Datentypen nach deren Rekursionsschema, also mit struktureller Rekursion Kompakter Code Vermeidung von Redundanz Angabe des Wesentlichen Vermeidung von Fehlern bei hand-programmierter Rekursion
52 Weitere Beispiele?
53 Weitere Beispiele? Die Funktion tabulate verwandelt über einem gegebenen Intervall in tabellierende 1 > tabulate (Int, Int )->(Int ->a)->(int ->a) 2 > tabulate (lo,up) f = (t!) where 3 > t = array ( lo, up) ( zip domain ( map f domain )) 4 > domain = [lo.. up] 1 2 > g = tabulate f was sich beim mehrfachen Aufruf von g anstelle von f bezahlt macht.
54 Combinator Languages, edsls höherer Ordnung, deren Argumente nur sind, nennt man Kombinatoren. In manchen Anwendungen gibt es eine Anzahl komplexer, spezifischer Operationen, die sich zu Kombinatoren abstrahieren lassen. Beispiele Parsing, Prettyprinting, Dynamic Programming, Format-Transformationen Dies führt zur Definition von anwendungs-spezifischen Sprachen, eingebettet (embedded domain specific languages, edsls) Dies ist der schnellste Weg zu einer DSL, aber nicht der Weg zur schnellsten DSL
55 Zusammenfassung Wann definiert man selbst neue höherer Ordnung? Wenn sich die gleiche Verknüpfung anderer mehrfach wiederholt,...
56 Zusammenfassung Wann definiert man selbst neue höherer Ordnung? Wenn sich die gleiche Verknüpfung anderer mehrfach wiederholt, macht die Verwendung von Kombinatoren die Systematik transparent, hilft beim Vermeiden von Fehlern, und erhöht so die eigene Programmier-Produktivität
57 Weitere höherer Ordnung Zum Beispiel die Funktions-Komposition 1 infixr (.) (b -> c) -> (a -> b) -> a -> c 4 f. g = \ x -> f (g x)
58 Weitere höherer Ordnung Zum Beispiel die Funktions-Komposition 1 infixr (.) (b -> c) -> (a -> b) -> a -> c 4 f. g = \ x -> f (g x) Oder 5 (.) (b -> c) -> (a -> b) -> a -> c 6 (.) f g x = f (g x)
59 Weitere höherer Ordnung Zum Beispiel die Funktions-Komposition 1 infixr (.) (b -> c) -> (a -> b) -> a -> c 4 f. g = \ x -> f (g x) Oder 5 (.) (b -> c) -> (a -> b) -> a -> c 6 (.) f g x = f (g x) Übersichtlich für Algorithmen mit mehreren Phasen 1 > treesort = sorttree. build 2 3 > compile = writecode. m- opt. codegen. implmap. 4 > transform. semcheck. parse. tokenize Das zweite Beispiel beschreibt die typischen Phasen eines Compilers
60 $, $! und seq Oder sogar die Funktionsanwendung als Funktion 1 infixr 0 $ 2 3 ($) (a -> b) -> a -> b 4 f $ x = f x -- $ heisst " apply "
61 $, $! und seq Oder sogar die Funktionsanwendung als Funktion 1 infixr 0 $ 2 3 ($) (a -> b) -> a -> b 4 f $ x = f x -- $ heisst " apply " infix application operator spart Klammern
62 $, $! und seq Oder sogar die Funktionsanwendung als Funktion 1 infixr 0 $ 2 3 ($) (a -> b) -> a -> b 4 f $ x = f x -- $ heisst " apply " infix application operator spart Klammern Strikte Funktionsanwendung 1 > infixr 0 $! 2 > f $! x = x seq f x -- = f x, aber strikt seq ist die sequentielle Auswertung und dient der Vermeidung unerwünschter Laziness.
63 $, $! und seq seq ist eingebaute Funktion mit den Eigenschaften a seq b =, falls a = a seq b = b, falls x Es ändert ggf. Laufzeit (schneller oder langsamer), Speicherplatz (i.a. weniger) und Terminierungsverhalten (falls überhaupt problematisch), nicht aber die Ergebnisse einer Funktion wenn sie definiert ist. Vergleiche 1 let { cond a b c = if a then b else c; x = x} 2 in ( cond True 1) $ x 3 4 let { cond a b c = if a then b else c; x = x} 5 in ( cond True 1) $! x
64 foldr1 Listerverarbeitung ohne Startwert, von rechts 1 foldr1 (a -> a -> a) -> [a] -> a 2 foldr1 (*) = f 3 where f [a] = a 4 f (abxs) = a * f (bxs) Das letzte Listenelement dient als Startwert
65 foldl1... und das Gleiche von links her 1 foldl1 (a -> a -> a) -> [a] -> a 2 foldl1 (*) (xxs) = foldl (*) x xs Das erste Listenelement dient als Startwert
66 foldl1-beispiele
67 foldl1-beispiele 1 minimum = foldl1 min 2 maximum = foldl1 max Geht s kürzer?
Funktionale 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
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
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
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
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
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 [] = []
MehrHaskell, 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
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,
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
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)
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
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
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))
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
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
MehrFunktionale Programmierung. Frank Adler
F# Funktionale Programmierung Frank Adler Was ist funktionale Programmierung Funktionale Programmierung ist die Komposition von Funktionen. Funktionale Konzepte First-Class Functions Higher-Order Functions
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
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
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
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
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
MehrFunktionen höherer Ordnung
4 Funktionen höherer Ordnung In den vorangegangenen Kapiteln haben wir gesehen, dass in funktionalen Sprachen alle zusammengesetzte Werte Ausdrücke über Konstruktoren sind, die intern als Bäume bzw. als
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
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
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
MehrFunktionales Programmieren in Python
Wintersemester 2008/2009 1 Funktionen sind Objekte 2 lambda Funktionen 3 apply 4 map 5 zip 6 filter 7 reduce 8 List Comprehension Funktionales Programmieren Wer nicht funktional programmiert, programmiert
MehrKapitel 3: Programmierung mit Kombinatoren
Funktionale Programmierung (WS2005/2006) 3/1 Kapitel 3: Programmierung mit Kombinatoren Lernziele dieses Kapitels 1. Denken in unktionalen Komponenten, Vermeidung von Kontrolllussdenken (Rekursion) Details
MehrProgrammiersprachen. Organisation und Einführung. Berthold Hoffmann. Studiengang Informatik Universität Bremen
Organisation und Einführung Studiengang Informatik Universität Bremen Sommersemester 2010 (Vorlesung am Montag, der 12. April 2010) (Montag, der 12. April 2008) 1 Vorstellung 2 Organisation 3 Einführung
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
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
MehrFunktionale Programmierung
Funktionale Programmierung Mitschrift von www.kuertz.name Hinweis: Dies ist kein offizielles Script, sondern nur eine private Mitschrift. Die Mitschriften sind teweilse unvollständig, falsch oder inaktuell,
MehrKapitel 7 des Buches, von Java-Selbstbau nach Scala-Library portiert. 2014-11-14 Christoph Knabe
Anfragen für Listen Kapitel 7 des Buches, von Java-Selbstbau nach Scala-Library portiert. 2014-11-14 Christoph Knabe 1 MapReduce-Verfahren Google u.a. verwenden Map-Reduce-Verfahren zur Verarbeitung riesiger
MehrDer λ-kalkül. Frank Huch. Sommersemester 2015
Der λ-kalkül Frank Huch Sommersemester 2015 In diesem Skript werden die Grundlagen der Funktionalen Programmierung, insbesondere der λ-kalkül eingeführt. Der hier präsentierte Stoff stellt einen teil der
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,
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)
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
MehrFunktionale Programmierung Teil 2 Methodik: Spezifikation, Implementierung, Verifikation
Grundlagen der Programm- und Systementwicklung Funktionale Programmierung Teil 2 Methodik: Spezifikation, Implementierung, Verifikation Technische Universität München Institut für Informatik Software &
MehrSyntaktische Analyse (Parsen)
Syntaktische Analyse (Parsen) Gegeben: eine kontextfreie Grammatik G und ein String w. Fragen: Vorgehen: gehört w zu L(G)? Welche Bedeutung hat w? Konstruiere Herleitungsbaum zu w P raktische Informatik
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.
MehrInterpreter - Gliederung
Institut für Informatik Ludwig-Maximilian Universität Interpreter - Gliederung Programmiersprache Syntax Konkrete Syntax Abstrakter Syntax Baum (Abstrakte Syntax) Parser Syntaktische Struktur einer Sprache
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
MehrGrundlagen der Informatik I (Studiengang Medieninformatik)
Grundlagen der Informatik I (Studiengang Medieninformatik) Thema: 3. Datentypen, Datenstrukturen und imperative Programme Prof. Dr. S. Kühn Fachbereich Informatik/Mathematik Email: skuehn@informatik.htw-dresden.de
MehrÜbungen zur Vorlesung Funktionale Programmierung. Wintersemester 2012/2013 Übungsblatt 1
Übungsblatt 1 Installieren Sie die Haskell-Platform (http://www.haskell.org/platform/) auf ihrem Rechner. Stellen Sie zudem sicher, dass ghci zu ihrer Pfadvariablen hinzugefügt wird. Unter Windows nden
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,
MehrPraktikum Funktionale Programmierung Teil 1: Lexen und Parsen
Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Professur für Künstliche Intelligenz und Softwaretechnologie Sommersemester 2009 Überblick Teil 1: Lexen und Parsen Die Sprache LFP +C Professur
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:
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
MehrLösungvorschlag zum Übungsblatt 6: Software-Entwicklung I (WS 2007/08)
Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. J. O. Blech Dipl.-Inform. M. J. Gawkowski Dipl.-Inform. N. Rauch TU Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungvorschlag zum Übungsblatt
MehrEffizienz in Haskell
Informatikseminar WS03/04 Oliver Lohmann mi4430 1 Gliederung Allgemeine Definition von Effizienz Lazy Evaluation Asymptotische Analyse Parameter Akkumulation Tupling Speicherplatz kontrollieren Allgemeine
MehrKapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte
Elementare Schritte Ein elementarer Berechnungsschritt eines Algorithmus ändert im Allgemeinen den Wert von Variablen Zuweisungsoperation von fundamentaler Bedeutung Zuweisungsoperator In Pascal := In
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
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
MehrEine zu Grunde liegende Typdefinition beschreibt eine Struktur, die alle erlaubten Instanzen dieses Typs gemeinsam haben.
Der binäre Baum Tree Die geläufigste Datenstuktur ist der binäre Baum Tree. Dieses Beispielskript zeigt im direkten Vergleich zu anderen Sprachen den Umgang mit formalen Typparametern in CHELSEA. Wir steigen
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
MehrMonaden in anderen Programmiersprachen
Monaden in anderen Programmiersprachen Themen Informatik-Seminar SS 2013: Programmiersprachen und Sprachsysteme Bei: Prof. Dr. Schmidt, FH Wedel inf9500 Sebastian Philipp Überblick Motivation Monaden in
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
MehrProgrammierung und Modellierung
Programmierung und Modellierung Terme, Suchbäume und Pattern Matching Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 7. Binärer Suchbaum 8. Anwendung:
Mehr1. Erläutern Sie die Aufgaben von Datentypen in der imperativen Programmierung.
1. Erläutern Sie die Aufgaben von Datentypen in der imperativen Programmierung. Beschreiben Sie ferner je einen frei gewählten Datentyp aus der Gruppe der skalaren und einen aus der Gruppe der strukturierten
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)
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?
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
MehrKryptoCore-Entwurf und Funktionale Programmierung
KryptoCore-Entwurf und Funktionale Programmierung Tobias Häberlein und Matthias Brettschneider haeberlein@hs-albsig.de brettschneider@hs-albsig.de Hochschule Albstadt-Sigmaringen Studiengang Kommunikations-
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.
MehrFunktionale Programmierung. der direkte Weg vom Modell zum Programm
1 Funktionale Programmierung der direkte Weg vom Modell zum Programm Peter Padawitz, TU Dortmund 19. Juni 2010 2 Inhalt Modelle Bestandteile eines Modells Konstruktor- versus destruktorbasierte Modelle
MehrProgrammierkurs: Delphi: Einstieg
Seite 1 von 6 Programmierkurs: Delphi: Einstieg Aus Wikibooks Inhaltsverzeichnis 1 Einstieg Einstieg Was ist Delphi Borland Delphi ist eine RAD-Programmierumgebung von Borland. Sie basiert auf der Programmiersprache
MehrFunktionale Programmierung
FP-1.0 Funktionale Programmierung Prof. Dr. Uwe Kastens SS 2013 Vorlesung Funktionale Programmierung SS 2013 / Folie 100 Begrüßung Functional Programming is Fun FP-1.1 Fun ctional Programming is Fun ctional
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
MehrJava Kurs für Anfänger Einheit 5 Methoden
Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden
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
MehrDie Programmiersprache C Eine Einführung
Die Programmiersprache C Eine Einführung Christian Gentsch Fakutltät IV Technische Universität Berlin Projektlabor 2. Mai 2014 Inhaltsverzeichnis 1 Einführung Entstehungsgeschichte Verwendung 2 Objektorientiert
MehrGliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik
Informatik I WS 2012/13 Tutorium zur Vorlesung 1. Alexander Zietlow zietlow@informatik.uni-tuebingen.de Wilhelm-Schickard-Institut für Informatik Eberhard Karls Universität Tübingen 11.02.2013 1. 2. 1.
MehrÜbersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.
Übersicht Datenstrukturen und Algorithmen Vorlesung 5: (K4) Joost-Pieter Katoen Lehrstuhl für Informatik 2 Software Modeling and Verification Group http://www-i2.informatik.rwth-aachen.de/i2/dsal12/ 20.
MehrEinführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015
Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 4, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)
Mehr1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik
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
MehrÜbersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15
Übersicht Schleifen Schleifeninvarianten Referenztypen, Wrapperklassen und API CoMa I WS 08/09 1/15 CoMa I Programmierziele Linux bedienen Code umschreiben strukturierte Datentypen Anweisungen und Kontrollstrukturen
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
MehrDie Java Stream API. Funktionale Programmierung mit der Stream API des JDK 1.8. Prof. Dr. Nikolaus Wulff
Die Java Stream API Funktionale Programmierung mit der Stream API des JDK 1.8 Prof. Dr. Nikolaus Wulff Funktionale Programmierung Neben der Collection API mit default Methoden ist als weitere Neuerung
MehrGrundlagen der Programmierung 2. Bäume
Grundlagen der Programmierung 2 Bäume Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 24. Mai 2006 Graphen Graph: Menge von Knoten undzugehörige (gerichtete oder ungerichtete)
MehrKlausur C-Programmierung / 15.02.2014 / Klingebiel / 60 Minuten / 60 Punkte
Klausur C-Programmierung / 15.02.2014 / Klingebiel / 60 Minuten / 60 Punkte Musterlösung 1. Aufgabe (5 Punkte) Im folgenden Programmcode sind einige Fehler enthalten. Finden und markieren Sie mindestens
MehrSymbolische Programmierung. Gerd Stolpmann. Informatikbüro Dipl. Inform. Gerd Stolpmann
1.3.2006 Informatikbüro Dipl. Inform. Gerd Stolpmann Symbolische Programmierung Gerd Stolpmann 1 Übersicht Symbolische Datenverarbeitung: Was ist das? Symbolische Programmierung ist das Anwendungsgebiet
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
MehrEinführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel.
Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 7, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)
MehrSkriptsprachen am Beispiel Python
Seminar Programmiersprachen Skriptsprachen am Beispiel Python Norman Thomas 8. Juni 2004 Überblick Was sind Skriptsprachen? Was ist Python? Python und Syntax Datentypen Kontrollstrukturen Module Ausführung
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 2012 I. Die
MehrProgrammierung in Python
Programmierung in Python imperativ, objekt-orientiert dynamische Typisierung rapid prototyping Script-Sprache Funktionales und rekursives Programmieren P raktische Informatik 1, W S 2004/05, F olien P
MehrAusarbeitung des Interpreter Referats
Ausarbeitung des Interpreter Referats Gliederung 1. Programmiersprache 1.2. Syntax 1.2.1. Konkrete Syntax 1.2.2. Abstrakter Syntax Baum (Abstrakte Syntax) 2. Parser 2.1. Syntaktische Struktur einer Sprache
MehrWas ist ein Compiler?
Was ist ein Compiler? Was ist ein Compiler und worum geht es? Wie ist ein Compiler aufgebaut? Warum beschäftigen wir uns mit Compilerbau? Wie ist die Veranstaltung organisiert? Was interessiert Sie besonders?
MehrEinführung in die Informatik 1
Einführung in die Informatik 1 Algorithmen und algorithmische Sprachkonzepte Sven Kosub AG Algorithmik/Theorie komplexer Systeme Universität Konstanz E 202 Sven.Kosub@uni-konstanz.de Sprechstunde: Freitag,
MehrEine Einführung in die funktionale Programmierung mit Haskell
TECHNISCHE UNIVERSITÄT CAROLO-WILHELMINA ZU BRAUNSCHWEIG Übungsskript Eine Einführung in die funktionale Programmierung mit Haskell Jan Oliver Ringert, überarbeitet von Henning Basold und Christoph Szeppek
MehrVBA-Programmierung: Zusammenfassung
VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung
MehrErwin Grüner 09.02.2006
FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife
MehrProgrammieren Lernen mit BYOB. Gerald Futschek 5. November 2012
Programmieren Lernen mit BYOB Informatiktag 2012 Gerald Futschek 5. November 2012 Erste Programmier Schritte in der Schule Sehr viele verschiedene Dinge zu lernen: Syntax und Semantik der Befehle, Algorithmen,
MehrFunktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung
Funktionale Programmierung 1 Funktionale Programmierung: Vorlesungsüberblick 1. Funktionale Programmierung Prinzipien funktionaler Programmierung Funktionale Programmierung in prozeduralen Sprachen Rekursive
MehrThomas Behr. 17. November 2011
in in Fakultät für Mathematik und Informatik Datenbanksysteme für neue Anwendungen FernUniversität in Hagen 17. November 2011 c 2011 FernUniversität in Hagen Outline in 1 2 3 4 5 6 - Was ist das? in über
Mehr1. Probeklausur zu Programmierung 1 (WS 07/08)
Fachschaft Informatikstudiengänge Fachrichtung 6.2 Informatik Das Team der Bremser 1. Probeklausur zu Programmierung 1 (WS 07/08) http://fsinfo.cs.uni-sb.de Name Matrikelnummer Bitte öffnen Sie das Klausurheft
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
MehrDatentypen. Agenda für heute, 4. März, 2010. Pascal ist eine streng typisierte Programmiersprache
Agenda für heute, 4. März, 2010 Zusammengesetzte if-then-else-anweisungen Datentypen Pascal ist eine streng typisierte Programmiersprache Für jeden Speicherplatz muss ein Datentyp t (Datenformat) t) definiert
MehrProgrammieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff
Programmieren in C Rekursive Funktionen Prof. Dr. Nikolaus Wulff Rekursive Funktionen Jede C Funktion besitzt ihren eigenen lokalen Satz an Variablen. Dies bietet ganze neue Möglichkeiten Funktionen zu
Mehr