Higher Order Perl Martin Busik Vortrag über das Buch von Marc Jason Dominus.

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmentheorie 08 – Dynamische Programmierung (1)
Advertisements

Klassen - Verkettete Liste -
Aufgabe: Wie stellt man eine for-Schleife durch eine while-Schleife dar ?
Rekursion vs. Iteration
Hochschule Fulda – FB ET Sommersemester 2010
Strukturierter Text.
12. Iteration und Rekursion
Puck eine visuelle Programmiersprache für die Schule
der Universität Oldenburg
Kapitel 4 Syntaktische Analyse: LR Parsing.
Themen: Neue Funktionen Dynamische Bildgalerie Seminar: Macromedia Flash.
Java: Dynamische Datentypen
FH-Hof SQLJ Richard Göbel. FH-Hof SQLJ - Idee Erweiterung von Java um SQL Die Verwendung von SQL-Anweisungen innerhalb einer Programmiersprache wird vereinfacht.
Schleifen-beobachtung
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Union-Find-Strukturen
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Die Skriptsprache Perl (7)
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Einführung in die Programmierung Datensammlung
Template Pattern Richard Göbel.
Sitzung 3: Klassen, Objekte, Arrays und Kontrollstrukturen
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Informatik 1 Letzte Übung.
Informatik 1 Übung 4.
Signal-Prozessoren DSV1, 2009, Hhrt, 1 Mikro-Prozessor Von Neumann-Architektur Daten und Programmcode im gleichen Speicher => Sequenzieller Zugriff auf.
CGI (Common Gateway Interface)
Grundkonzepte des Programmierens (mit ActionScript)
Purga - Scriptengine Ein Einblick.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Was mich ursprünglich von Perl überzeugt hat. Gegeben ist eine Textdatei, deren Größe unbekannt ist. Sie ist jedoch so klein, daß sie komplett in den Speicher.
Objectives Verstehen was unterDelegate verstanden wird
MODULA-2.
Fraktale in PostScript
PHP: Operatoren und Kontrollstrukturen
Variablen. var meineZahl:Number = 7; meineZahl 7 Name TypWert = Zuweisung von Variablen.
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
Parallelisierung für Multiprozessor-Maschinen
1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen.
1 Lösung Hausaufgabe 5-1 Seite 1 #!perl -w # Datei Oeffnen und Variablen initialisieren $infile = "daten5-3.txt"; $im=$iw=$sm=$sw=0; open (IN,$infile)
Lernlandkarte OOP (ObjektOrientiertes Programmieren)
1 Tagesüberblick 7 Lösung Hausaufgabe/Fragen mehrdimensionale Datenstrukturen Module Fehlersuche Zusammenfassung Feedback.
Dr. Wolfram Amme, Semantik funktionaler Programme, Informatik II, FSU Jena, SS Semantik funktionaler Programme.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Kommunikation von Prozessen Signale und Pipes Alexander Sczyrba
Netzwerk - Programmierung
Fitness. An english presentation.
Netzwerk - Programmierung
Netzwerk - Programmierung
Whoami. whoami Tobias FROGGS Slangs sub languages.
Prüfungsbesprechung Barbara Scheuner
Netzwerk - Programmierung
I -tube, you -tube, we -tube ?
GRUNDLAGEN WISSENSCHAFTLICHEN ARBEITENS MODULA-2 SONAY SUBAYAZ
 Präsentation transkript:

Higher Order Perl Martin Busik Vortrag über das Buch von Marc Jason Dominus

Martin Busik Softwareentwicklung ist geprägt durch Hypes

Martin Busik Sie als Perl-Programmierer sind starken Vorurteilen ausgesetzt... perl is a write-once language

Martin Busik Räumen Sie die Vorurteile aus, in dem sie Konzepte der FP nutzen

Martin Busik Konzepte der Funktionalen Programmierung können in Perl verwendet werden $asub = sub {...} $csub = (...) ? $asub : \&bsub; $esub = $csub->($dsub,sub{$_*2},..) $esub->(...)

Martin Busik Das HOP-Buch ändert Ihre Art zu programmieren … vielleicht sogar ihr Verständnis der Programmierung

Martin Busik Der Schlüssel zu FP in Perl sind Closures sub add { my $a = shift; sub { my $b = shift; $a + $b } } $add5 = add(5); print $add5->(7);

Martin Busik Mit Closures können Sie globale Variablen eliminieren $SIG{__WARN__} = commonLogging($opt->{L} || 3); warn 5, " Starte xyz";

Martin Busik Auch ohne globale Variablen haben Sie einen "Zustand" *getNextId = sequenceGenerator(5); $a = getNextId();# $a enthält 5 $b = getNextId();# $b enthält 6

Martin Busik Trennen Sie Implementierung und Caching sub rgb2cmyk { my($r,$g,$b) } sub $rgb2cmyk_cached = wrap(\&rgb2cmyk);

Martin Busik Nutzen Sie Memoization für rekursive Funktionen sub asub { $n = shift; asub(--$n) if $n > 0 } *asub = wrap(\&asub); asub(5); sub asub { $n = shift; asub(--$n) if $n > 0 } use Memoize; memoize asub; asub(5);

Martin Busik $dt = { new => sub{...}, p => sub{...}, q => sub{...}}; $c = $dt->{$p}; die ".." unless ref($c); $c->(); Nutzen Sie Dispatch-Tabellen if($p eq "new") {...} elsif($p eq "p") {...} elsif($p eq "q") {...} else { die ".." }

Martin Busik Nutzen Sie Dispatch-Tabellen – mit und ohne Closures sub asub { my (...) my $f1=sub {..} my $f2=sub {... $f1->(..) } my $dt = { fall1 => $f1, fall2 => $f2, } $a = $dt->{$p}; $a->(...)

Martin Busik Verwenden Sie Iteratoren $i = erzeuge_iterator(...); $e1 = $i->(); $e2 = $i->next(); $e3 = $i->('next'); $i->hasNext(); $i->('hasNext?'); while(my $e = $i->())

Martin Busik Verwenden Sie Iteratoren... aber nicht nur als = (...) = (...) $i = while($e = $i->()) {operation($e)} An dieser Stelle "weiss" man nicht mehr, das über ein Array iteriert wird.

Martin Busik Verwenden Sie Iteratoren... eliminieren Sie = (...) $i = 0; while($i { op1($s[i++]) or last } while($i { op2($s[i++]) or last = (...) $i = op1($i); op2($i);

Martin Busik Definieren Sie Operationen auf Iteratoren igrep imap $i = igrep {$_->[0]=~/raute/i} $ai $e = $i->() $i = imap {{inh => $_}} $ai $e = $i->()

Martin Busik Wandeln Sie Rekursion in Iteration um... wenn Sie die Abbruchbedinung erst zur Laufzeit formulieren wollen... wenn die Ergebnismenge unendlich ist

Martin Busik Currying kann zur Code-Wieder- verwendung genutzt werden sub reduce {...} $summe = $produkt= *sumF = reduce({$a+$b},0); $summe = $spF=reduce({[$a+$b,$a*$b]},[0,1])

Martin Busik Einge Themen, die das Buch be- handelt, habe ich Ihnen vorenthalten... Datenströme (Streams)... Parser... Deklarative Programmierung

Martin Busik Konzepte der Funktionalen Programmierung können in Perl verwendet werden Aptly named, this truly /is/ a Perl book of a higher order, and essential reading for every serious Perl programmer Damian Conway

Martin Busik Danke für Ihre Aufmerksamkeit!