Funktionale Programmierung mit C++
|
|
|
- Paul Kramer
- vor 9 Jahren
- Abrufe
Transkript
1 Funktionale Programmierung mit C++ Rainer Grimm Softwarearchitekt Partner:
2 Überblick Programmierung in funktionaler Art Warum funktionale Programmierung? Was ist funktionale Programmierung? Charakteristiken funktionaler Programmierung Was fehlt in C++?
3 Funktional in C++ Automatische Typableitung std::vector<int> myvec; auto itvec= myvec.begin(); for ( auto v: myvec ) std::cout << v << " "; Lambda-Funktionen int a= 2000; int b= 11; auto sum= std::async( [=]{return a+b;} ); std::cout << sum.get(); 2011
4 Funktional in C++ Teilweise Funktionsanwendung (Currying) mit 1. function und bind 2. Lambda-Funktionen und auto int addme(int a, int b){ return a+b; } Haskell Curry Moses Schönfinkel std::function<int(int)> add1= bind(addme,2000,_1); auto add2= []{int b){ return addme(2000,b); }; auto add3= []{int b){ return addme(b,11); }; addme(2000,11) == add1(11) == add2(11) == add3(2000); 2011
5 Funktional in C++ Funktionen höherer Ordnung vector<int> vec{1,2,3,4,5,6,7,8,9}; for_each(vec.begin(),vec.end(), [ ]{int v){ cout << " " << v;}); for_each(vec.begin(),vec.end(),[ ](int& v){ v+= 10;}); for_each(vec.begin(),vec.end(), [ ]{int v){ cout << " " << v;});
6 Funktional in C++ Generische Programmierung ML führt generische Programmierung ein. Alexander Stepanov (Vater der STL) wurde von Lisp beeinflusst. Template Metaprogramming ist eine rein funktionale Subsprache in der imperativen Sprache C++.
7 Warum Funktional? Effizientere Nutzung der Standard Template Library accumulate(v.begin(),v.end(),1, [](int a,int b){return a*b;}); Funktionale Muster erkennen template <int N> struct Fac{ static int const val= N * Fac<N-1>::val; }; template <> struct Fac<0>{ static int const val= 1; }; Besserer Programmierstil Bewusster Umgang mit Seiteneffekten Kurz und prägnante Programmierung Verständlichere Programmierung
8 Funktionale Programmierung? Funktionale Programmierung ist Programmierung mit mathematischen Funktionen. Mathematische Funktionen sind Funktionen, die jedes Mal den selben Wert zurückgeben, falls sie die gleichen Argumente erhalten. (Referenzielle Transparenz) Konsequenzen Funktionen können keine Seiteneffekte besitzen. Die Funktionsaufrufe können durch ihr Ergebnis ersetzt, umsortiert oder auf einen andere Threads verteilt werden. Der Programmfluß wird durch den Datenfluß vorgegeben.
9 Charakteristiken first-class functions Bedarfsauswertung Funktionen höherer Ordnung Verarbeitung von Listen Charakteristiken funktionaler Programmierung Unveränderliche Daten Rekursion Reine Funktionen
10 First-class functions Funktionen sind first-class Objekte. Sie verhalten sich wie Daten. Funktionen können als Argumente an Funktionen übergeben werden. accumulate(vec.begin(),vec.end(),0, [ ]{ int a, int b}{ return a + b; }); von Funktionen zurückgegeben werden. function<int(int,int)> makeadd(){ } return [ ](int a, int b){ return a + b; }; function<int(int,int)> myadd= makeadd(); myadd(2000,11); 2011 an Variablen zugewiesen oder gespeichert werden.
11 First-class functions map<const char,function<double(double,double)> > tab; tab.insert(make_pair('+',[](double a,double b){return a + b;})); tab.insert(make_pair('-',[](double a,double b){return a - b;})); tab.insert(make_pair('*',[](double a,double b){return a * b;})); tab.insert(make_pair('/',[](double a,double b){return a / b;})); cout << " = " << tab['+'](3.5,4.5) << endl; 8 cout << "3.5*4.5= " << tab['*'](3.5,4.5) << endl; tab.insert(make_pair('^', [](double a,double b){return pow(a,b);})); cout << "3.5^4.5= " << tab['^'](3.5,4.5) << endl;
12 First-class functions Lambda- Funktionen C++11 Funktionsobjekte C++ Funktionszeiger C
13 Funktionen höherer Ordnung Funktionen höherer Ordnung sind Funktionen, die Funktionen als Argumente annehmen oder als Ergebnis zurückgeben können Die drei Klassiker map: filter: Wende eine Funktion auf jedes Element einer Liste an. Entferne Elemente einer Liste. reduce: (Quelle: http.//musicantic.blogspot.de) Wende ein binäre Operation sukzessive auf die Elemente einer Liste an um diese auf einen Wert zu reduzieren.
14 Funktionen höherer Ordnung Jede Programmiersprache, die Programmierung in funktionaler Art unterstützt, bietet die Funktionen map, filter und fold an.
15 Funktionen höherer Ordnung
16 Funktionen höherer Ordnung Listen und Vektoren Haskell vec= [1.. 9] str= ["Programming","in","a","functional","style."] Python vec=range(1,10) str=["programming","in","a","functional","style."] C++ vector<int> vec{1,2,3,4,5,6,7,8,9} vector<string>str{"programming","in","a","functional","st yle."} Die Ergebnisse werden in Haskell oder Python Notation dargestellt.
17 Funktionen höherer Ordnung Haskell map(\a a^2) vec map(\a -> length a) str Python map(lambda x :x*x, vec) map(lambda x : len(x),str) C++ transform(vec.begin(),vec.end(),vec.begin(), [](int i){ return i*i; }); transform(str.begin(),str.end(),back_inserter(vec2), [](string s){return s.length();}); [1,4,9,16,25,36,49,64,81] [11,2,1,10,6]
18 Funktionen höherer Ordnung Haskell filter(\x-> x<3 x>8) vec filter(\x isupper(head x)) str Python filter(lambda x: x<3 or x>8, vec) filter(lambda x: x[0].isupper(),str) C++ auto it= remove_if(vec.begin(),vec.end(), [](int i){ return!((i < 3) or (i > 8))}); auto it2= remove_if(str.begin(),str.end(), [](string s){ return!(isupper(s[0])); }); [1,2,9] [ Programming ]
19 Funktionen höherer Ordnung Haskell foldl (\a b a * b) 1 vec foldl (\a b a ++ ":" ++ b ) "" str Python reduce(lambda a, b: a * b, vec, 1) reduce(lambda a, b: a + ":" + b, str,"") C++ accumulate(vec.begin(),vec.end(),1, [](int a, int b){ return a*b; }); accumulate(str.begin(),str.end(),string(""), [](string a,string b){ return a+":"+b; }); :Programming:in:a:functional:style.
20 Funktionen höherer Ordnung vector<int> v{1,2,3,4}; accumulate(v.begin(),v.end(),1,[](int a, int b){return a*b;}); 1 * { 1, 2, 3, 4 } 1 * 1 = 1 * 2 = 2 * 3 = 6 * 4 = 24
21 Unveränderliche Daten Daten sind in rein funktionalen Programmiersprachen unveränderlich. Unterscheidung von Variablen und Werten Konsequenzen Es gibt keine Zuweisungen: x= x + 1, ++x Schleifen: for, while, until Beim Daten modifizieren werden veränderte Kopien der Daten erzeugt. die ursprünglichen unveränderlichen Daten geteilt. Unveränderliche Daten sind Thread-Safe.
22 Umgang mit Veränderung? Haskell Scala D Unveränderliche Daten Monaden für das explizite Verändern von Daten State Monade für zustandsbehaftete Berechnung Mvar Monade für Synchronisation von Daten zwischen Threads Variablen können als var (variable) oder val (value) deklariert werden. Per Default sind Daten unveränderlich (val). class Person( val name: String, var age: Int ) def person= new Person( Huber,33) person.age= 34 Variablen können als immutable oder mutable (Default) deklariert werden.
23 Unveränderliche Daten Haskell qsort [] = [] qsort (x:xs) = qsort [y y <- xs, y < x] ++ [x] ++ qsort [y y <- xs, y >= x] C++ void quicksort(int arr[], int left, int right) { int i = left, j = right; int tmp; int pivot = arr[abs((left + right) / 2)]; while (i <= j) { while (arr[i] < pivot) i++; while (arr[j] > pivot) j--; } if (i <= j) { tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; i++; j--; } } if (left < j) quicksort(arr,left,j); if (i < right) quicksort(arr,i,right);
24 Reine Funktionen Reine Funktionen Erzeugen immer dasselbe Ergebnis, wenn sie die gleichen Argumente erhalten. Besitzen keine Seiteneffekte. Verändern nie den Zustand. Unreine Funktionen Kann verschiedene Ergebnisse für dieselben Argumente erzeugen. Kann Seiteneffekte besitzen. Kann den globalen Zustand des Programmes ändern. (Quelle: Real World Haskell) Vorteile Korrektheitsbeweise sind einfacher durchzuführen. Refaktoring und Test ist einfacher möglich. Zwischenergebnisse von Funktionsaufrufe können gespeichert werden. Die Ausführungsreihenfolge der Funktion kann umgeordnet oder parallelisiert werden.
25 Reine Funktionen Monaden sind Haskells Antwort auf die unreine Welt. kapseln die unreine Welt sind ein imperatives Subsystem repräsentieren eine Rechenstruktur definieren die Komposition von Berechnungen Funktionale Design Pattern für generische Typen
26 Reine Funktionen Monaden sind abstrakte Datentypen, die einfache Typen in einen höheren Typ transformieren. Eine Monade besteht aus 1. Typkonstruktor ( int -> [int]; int -> std::vector<int> ) Erklärt den zugrundeliegeden Typ der Monade. 2. Funktionen. Einheitsfunktion: Bildet den zugrunde liegenden Typ auf den Monadentyp ab. ( 5 -> [5] ) Funktionskompostion: Verknüpfung monadischer Werte. 3. Verknüpfung von Operationen auf Monaden mit den Regeln Die Einheitsfunktion muss links- und rechtsneutral sein. Die Verknüpfung von Operation muss assoziativ sein.
27 Reine Funktionen List Monade STM Monade Maybe Monade P a r s e c
28 Reine Funktionen Monaden werden wichtiger. Kontrolle von Seiteneffekten. Haskell Clojure, Scala, C#(LINQ) C++ optional war für C++14 geplant optional<int> getfirst(){ } if (!vec.empty() ) return optional<int>(vec[0]); else return optional<int>(); future als Monade C++17: I See a Monad in Your Future! (
29 Rekursion Ist die Kontrollstruktur in der funktionalen Programmierung. Schleifen benötigen eine Laufvariable: (for int i=0; i <= 0; ++i) Variablen existieren nicht in rein funktionalen Sprachen. Rekursion in Kombination mit dem Verarbeiten von Listen ist ein mächtiges Pattern in funktionalen Sprachen.
30 Rekursion Haskell fac 0= 1 fac n= n * fac (n-1) C++ template<int N> struct Fac{ }; static int const value= N * Fac<N-1>::value; template <> struct Fac<0>{ static int const value = 1; }; fac(5) == Fac<5>::value == 120
31 Rekursion Fac<5>::value = = 5 * Fac<4>::value = 5 * 4 * Fac<3>::value = 5 * 4 * 3 * Fac<2>::value = 5 * 4 * 3 * 2 * Fac<1>::value = 5 * 4 * 3 * 2 * 1 * Fac<0>::value = 5 * 4 * 3 * 2 * 1 * 1 = 120
32 Eine Funktion f ist endrekursiv, wenn der rekursive Aufruf die letzte Berechnung der Funktion f darstellt. Rekursion Funktionale Sprachen unterstützen tail call optimisation rekursive Funktionsaufrufe benötigen nur einen Stackframe
33 Verarbeitung von Listen List Processing (Lisp) ist typisch für funktionale Sprachen. Transformiere die Liste in ein andere Liste. Reduziere die Liste auf einen Wert. Funktionale Pattern für die Listenverarbeitung 1. Prozessiere den Kopf der Liste. 2. Prozessiere rekursive den Rest der Liste. mysum []= 0 mysum (x:xs) = x + mysum xs mysum [1,2,3,4,5] 15 mymap f [] = [] mymap f (x:xs)= f x: mymap f xs mymap (\x x*x)[1,2,3] [1,4,9]
34 Verarbeitung von Listen template<int...> struct mysum; template<> struct mysum<>{ static const int value= 0; }; template<int i, int... tail> struct mysum<i,tail...>{ static const int value= i + mysum<tail...>::value; }; int sum= mysum<1,2,3,4,5>::value; sum == 15
35 Verarbeitung von Listen Die zentrale Idee: Pattern Matching First Match in Haskell mult n 0 = 0 mult n 1 = n mult n m = (mult n (m 1)) + n Best Match in C++ template < int N1, int N2 > class Mult { }; template < int N1 > class Mult <N1,1> { }; template < int N1 > class Mult <N1,0> { };
36 Bedarfsauswertung Werte nur aus, was benötigt wird. Haskell ist faul (lazy evaluation) length [2+1, 3*2, 1/0, 5-4] C++ ist gierig (greedy evaluation) int onlyfirst(int a, int){ return a;} onlyfirst(1,1/0); Vorteile Sparen von Zeit und Speicher Verarbeitung von unendlichen Datenstrukturen
37 Bedarfsauswertung Haskell successor i= i: (successor (i+1)) take 5 ( successor 10 ) [10,11,12,13,14] [1..]= [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15... Control-C odds= takewhile (< 1000). filter odd. map (^2) odds [1..] [1,9,25,, 841,961] C++ besitzt den Spezialfall Kurzschlussauswertung if ( true or (1/0) ) cout << "works in C++";
38 Was fehlt? List comprehension: Syntactic Sugar für map und filter An mathematische Notation angelehnt { n*n n e N, n mod 2 = 0 } : Mathematik [n*n n <- [1..], n `mod` 2 == 0 ] : Haskell Python [n for n in range(8)] [0,1,2,3,4,5,6,7] [n*n for n in range(8)] [0,1,4,9,16,25,36,49] [n*n for n in range(8) if n%2 == 0] [0,4,16,36]
39 Was fehlt? Funktionskomposition: fluent interface Haskell (reverse. sort)[10,2,8,1,9,5,3,6,4,7] [10,9,8,7,6,5,4,3,2,1] istit (x:xs)= isupper x && all islower xs sortitlen= sortby(comparing length).filter istit. words sortitlen A Sentence full of Titles. [ A, Titles, Sentence ]
40 Was fehlt? Typklassen: Schnittstellen für Instanzen einer Familie von Typen Typklasse Eq class Eq a where (==) :: a -> a -> Bool (/=) :: a -> a -> Bool Typ Bool als Instanz der Typklasse Eq instance Eq Bool where True == True = True False == False = True _ == _ = False
41 Was fehlt? Datentyp Day data Day= Morning Afternoon deriving (Eq,Show) isequal a b = a == b
42 Integral Was fehlt?
43 Was fehlt? Concepts Lite: Zusicherungen an Templates mit C++17 Anwendung template<sortable Cont> void sort(cont& container); Äquivalent template<typename Cont> requires Sortable<Cont>() void sort(cont& container); Prädikat template <typename T> constexpr bool Sortable(){...
44 Was fehlt? Zusicherungen an Templates erlauben Mehrere Bedingungen an Templateargumente zu stellen Überladen von Funktions-Templates und Klassen-Template Spezialisierung template<input_iterator I> void advance(i& iter, int n); template<random_access_iterator I> void advance(i& iter, int n); Verbesserte Fehlermeldungen bei der Templateinstanziierung Mehrwert ohne zusätzliche Kosten für die Lauf- oder Übersetzungszeit
45 Was fehlt? Höhere Threadabstraktion mit C++17 Transaktional Memory Datenbankidee der Transaktion auf Software angewandt Codeblöcke genügen der ACI(D)-Forderung werden optimistisch ausgeführt und veröffentlich, falls die Ausgangsbedingungen noch gelten Clojure, Scala und Haskell bieten Software Transaktional Memory an Erweiterte Unterstützung von Tasks (async) Proposal N3721, N3865 und N3896
46 Partner: FRAGEN?
47 Ich freue mich auf Ihr Feedback! Vielen Dank! Rainer Grimm Partner:
Funktionale Programmierung mit C++
Funktionale Programmierung mit C++ Überblick Programmierung in funktionaler Art Warum funktionale Programmierung? Was ist funktionale Programmierung? Charakteristiken funktionaler Programmierung Was fehlt
Funktionale Programmierung mit modernem C++ Rainer Grimm Schulungen, Coaching und Technologieberatung
Funktionale Programmierung mit modernem C++ Rainer Grimm Schulungen, Coaching und Technologieberatung Funktionale Programmierung in modernem C++ Funktional in C++ Warum Funktional? Definition Charakteristiken
Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung
Gliederung n Teil I: Einleitung und Grundbegriffe l 1. Organisatorisches l 2. Grundlagen von Programmiersprachen n Teil II: Imperative und objektorientierte Programmierung l 1. Grundelemente der Programmierung
Lambda-Funktionen. Lambda-Funktionen. Lambda-Funktionen sollen
Lambda-Funktionen Lambda-Funktionen sind Funktionen ohne Namen. definieren ihre Funktionalität an Ort und Stelle. können wie Daten kopiert werden. können ihren Aufrufkontext speichern. Lambda-Funktionen
Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1
Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten
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
Programmieren in Haskell Einstieg in Haskell
Programmieren in Haskell Einstieg in Haskell Peter Steffen Universität Bielefeld Technische Fakultät 24.10.2008 1 Programmieren in Haskell Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke
Funktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda
ALP I SS 2011 Funktionstypen Funktionen haben einen Datentyp, der folgende allgemeine Form hat: functionname :: T 1 -> T 2, wobei T 1, T 2 wiederum beliebige Datentypen sind Beispiel: T 1 T 2 Der Datentyp
Einfü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
Programmieren in Haskell
Programmieren in Haskell Wir steigen ein... Programmieren in Haskell 1 Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke und Werte Datentypen Funktionen Aufgabe für s Wochenende Programmieren
Programmieren in Haskell
Programmieren in Haskell Wir steigen ein... Programmieren in Haskell 1 Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke und Werte Datentypen Funktionen Aufgabe für diese Woche Programmieren
III.1 Prinzipien der funktionalen Programmierung - 1 -
1. Prinzipien der funktionalen Programmierung 2. Deklarationen 3. Ausdrücke 4. Muster (Patterns) 5. Typen und Datenstrukturen 6. Funktionale Programmiertechniken III.1 Prinzipien der funktionalen Programmierung
Funktionale 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
Was 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
Grundlegende Datentypen
Funktionale Programmierung Grundlegende Datentypen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 14.11.2017 15:37 Inhaltsverzeichnis Typen........................................
Angewandte Mathematik und Programmierung
Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der
Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster
16:02:16 2017-01-17 1 [30] Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom 10.01.2017: Monaden als Berechnungsmuster Christoph Lüth Universität Bremen Wintersemester 2016/17 Frohes
Funktionale Programmierung Grundlegende Datentypen
Grundlegende Datentypen Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 06.11.2017 16:45 Inhaltsverzeichnis Typen........................................
Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.
4.5.5 Rekursive Typen Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. datatype IntList = Nil Cons o f ( i n t IntList ) ; Damit
Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1
Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten
Paradigmen 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)]
Stack. Seniorenseminar Michael Pohlig
Stack Seniorenseminar 21.06.2013 Michael Pohlig ([email protected]) Übersicht 1. Axiomatik eins Kellers und seine Software- Realisierung 2. Bedeutung der Rekursion in der Mathematik 3. Rekursive Programmierung.
Algorithmen 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
Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie
Rev. 2749 1 [28] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 04.11.2014: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2014/15 2 [28] Fahrplan Teil
Funktionale Programmiersprachen
Funktionale Programmiersprachen An den Beispielen Haskell und Erlang Übersicht Programmiersprachen λ-kalkül Syntax, Definitionen Besonderheiten von funktionalen Programmiersprache, bzw. Haskell Objektorientierte
Einführung in die funktionale Programmierung
Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 26. Oktober 2006 Haskell - Einführung Syntax Typen Auswertung Programmierung
Motivation Von Funktoren, Komposition, Applikation Zu Monoiden Die Monade Zusammenfassung. Monaden für alle. Franz Pletz
Monaden für alle Franz Pletz Chaos Computer Club München 13. Juni 2010, GPN10 Wieso, weshalb, warum? einige von euch haben sich sicher schon mal Haskell angeschaut und sind an Monaden
Prü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
Objektorientierte Programmierung mit C++ SS 2007
Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 5. Juni 2007 Polymorphismus #include Function.h class Function { public: virtual ~Function() {}; virtual std::string
Workshop Einführung in die Sprache Haskell
Workshop Einführung in die Sprache Haskell Nils Rexin, Marcellus Siegburg und Alexander Bau Fakultät für Informatik, Mathematik und Naturwissenschaften Hochschule für Technik, Wirtschaft und Kultur Leipzig
INFORMATIK FÜR BIOLOGEN
Technische Universität Dresden 15012015 Institut für Theoretische Informatik Professur für Automatentheorie INFORMATIK FÜR BIOLOGEN Musterklausur WS 2014/15 Studiengang Biologie und Molekulare Biotechnologie
Was 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
Programmieren in Haskell Das Haskell Typsystem
Programmieren in Haskell Das Haskell Typsystem Peter Steffen Robert Giegerich Universität Bielefeld Technische Fakultät 22.01.2010 1 Programmieren in Haskell Belauscht... Lisa Lista: Ohne Typen keine korrekten
Polymorphismus 179. Function.h. #include <string>
Polymorphismus 179 #include Function.h class Function { public: virtual ~Function() {}; virtual std::string get_name() const = 0; virtual double execute(double x) const = 0; }; // class Function
Einführung in die Informatik 2
Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Lars Noschinski, Dr. Jasmin Blanchette, Dmitriy Traytel Wintersemester 2012/13 Lösungsblatt Endklausur 9. Februar 2013
Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren
Dynamische Datentypen Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Probleme mit Feldern (variabler Länge) man kann sie nicht direkt kopieren und zuweisen Probleme mit
ALP I. Funktionale Programmierung
ALP I Funktionale Programmierung Zusammengesetzte Datentypen in Haskell WS 2012/2013 Zusammengesetzte Datentypen Tupel List String Zusammengesetzte Datentypen Tupel-Datentyp Ein Tupel ist eine Ansammlung
C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16
C++ Teil 4 Sven Groß IGPM, RWTH Aachen 30. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 4 30. Apr 2015 1 / 16 Themen der letzten Vorlesung Funktionen: Definition und Aufruf Wert- und Referenzparameter,
VL06: Haskell (Funktionen höherer Ordnung, Currying)
VL06: Haskell (Funktionen höherer Ordnung, Currying) IFM 5.3 Spezielle Methoden der Programmierung Carsten Gips, FH Bielefeld 18.05.2015 Wiederholung Wiederholung Wie können Sie die ersten n Elemente einer
Programmieren 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
Funktionale 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
Mapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6.
Mapra: C++ Teil 4 Felix Gruber IGPM, RWTH Aachen 6. Mai 2015 Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6. Mai 2015 1 / 22 Themen vom letzten Mal Kompilieren mit Makefiles Ein-/Ausgabe über Dateien
Funktionale 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
Programmierkurs II. Typsynonyme & algebraische Datentypen
Programmierkurs II Typsynonyme & algebraische Datentypen Um Dinge der realen Welt abzubilden, ist es nur in den seltensten Fällen komfortabel alles als Zahlen, Strings oder Listen zu kodieren. Wir benötigen
Praktische Informatik 3: Funktionale Programmierung Vorlesung 5 vom : Funktionen Höherer Ordnung I
Rev. 2766 1 [33] Praktische Informatik 3: Funktionale Programmierung Vorlesung 5 vom 11.11.2014: Funktionen Höherer Ordnung I Christoph Lüth Universität Bremen Wintersemester 2014/15 2 [33] Fahrplan Teil
Funktionale Programmierung. Monoide. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München
Funktionale Programmierung Monoide Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 03.12.2018 07:53 Inhaltsverzeichnis Abstraktion..................................... 1 Eine
HASKELL KAPITEL 2.1. Notationen: Currying und das Lambda-Kalkül
HASKELL KAPITEL 2.1 Notationen: Currying und das Lambda-Kalkül Bisheriges (Ende VL-Teil 1) weite :: (Float,Float) ->Float weite (v0, phi) = (square(v0)/9.81) * sin(2 * phi) (10, 30 ) smaller ::(Integer,
Grundprinzipien der funktionalen Programmierung
Grundprinzipien der funktionalen Programmierung Funktionen haben keine Seiteneffekte Eine Funktion berechnet einen Ausgabewert der nur von den Eingabewerten abhängt: 12 inputs + output 46 34 2 Nicht nur
Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes
Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine
Ströme als unendliche Listen in Haskell
Ströme als unendliche Listen in Haskell Strom := Folge oder Liste von Daten, unbegrenzt viele Daten-Elemente. Ströme sind in Haskell als als (potentiell) unendliche Listen darstellbar und programmierbar
Funktionale Programmierung. Das Funktionale Quiz. Das Funktionale Quiz. Das Funktionale Quiz
Funktionale Programmierung Das Funktionale Quiz 31.5.2005 Nenne eine Gemeinsamkeit zwischen Typklassen und OO-Klassen Das Funktionale Quiz Das Funktionale Quiz Nenne einen Unterschied zwischen Typklassen
Funktionales 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
Monoide. Funktionale Programmierung. Prof. Dr. Oliver Braun Letzte Änderung: :54. Monoide 1/16
Monoide Funktionale Programmierung Prof. Dr. Oliver Braun Letzte Änderung: 09.10.2018 06:54 Monoide 1/16 Abstraktion gleichartige Strukturen sollten abstrahiert werden Beispiel: Collections in Haskell
Listen und Listenfunktionen. Grundlagen der Programmierung 2 A (Listen) Listen und Listenfunktionen. Listen? Haskell: Listen
Listen und Listenfunktionen Grundlagen der Programmierung 2 A (Listen) Haskell: Listen Prof. Dr. Manfred Schmidt-Schauß Listen modellieren Folgen von gleichartigen, gleichgetypten Objekten. Ausdruck im
Unendliche Listen und Bäume
Funktionale Programmierung Unendliche Listen und Bäume Helga Karafiat, Steffen Rüther Übersicht Grundlage: Lazy Evaluation Konstruktion von unendlichen Strukturen Verwendung von unendlichen Listen Unendliche
Haskell für Mathematiker
Haskell für Mathematiker Joachim Breitner AG Seminar Topology 12. Mai 2016, Karlsruhe LEHRSTUHL PROGRAMMIERPARADIGMEN 1 KIT 19.2.2016 University of the Joachim State ofbreitner Baden-Wuerttemberg - Haskell
Datenstrukturen / Container in Java
Datenstrukturen / Container in Java Mathematik / Algebraischer Datentyp / Containerklassen Enum-Klassen Arrays (Felder) = elementare Container Algorithmen mit Arrays Prof. Dr. E. Ehses, 2014 1 Mathematik
Programmieren in Java
Programmieren in Java Vorlesung 11: Generic Methods Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2017 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 15 Inhalt
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
Kapitel 3: Eine einfache Programmiersprache. Programmieren in Haskell 1
Kapitel 3: Eine einfache Programmiersprache Programmieren in Haskell 1 Datentypen, Datentypdefinitionen data Instrument = Oboe HonkyTonkPiano Cello VoiceAahs data Musik = Note Ton Dauer Pause Dauer Musik
Theorie 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
Einführung in die STL
1/29 in die STL Florian Adamsky, B. Sc. (PhD cand.) [email protected] http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/29 Outline 1 3/29 Inhaltsverzeichnis 1 4/29 Typisierung
Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte)
Matrikelnummer: 1 Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte) Kreuzen Sie an, ob die folgenden Aussagen richtig oder falsch sind. Bewertung: keine Antwort: 0 Punkte richtige Antwort: +0.5 Punkte falsche
Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR.
Methoden zur Interpretation LISPähnlicher Programmiersprachen Seminarvortrag 20.01.2017 FACHBEREICH 9 TOBIAS STUMM MATR.-NR. 4012917 1 Inhalt Motivation Lisp > Definition > Scheme Interpreter > Definition
WS 2011/2012. Georg Sauthoff 1. October 18, 2011
in in WS 2011/2012 Georg 1 AG Praktische Informatik October 18, 2011 1 [email protected] Neue Übungsgruppen in neue Übungsgruppen neue Tutoren Sprechstunden in GZI-Arbeitsraum (V2-240)
