Higher Order Perl - PowerPoint PPT Presentation

About This Presentation
Title:

Higher Order Perl

Description:

Title: HOP Author: Martin Busik Created Date: 8/16/2006 2:47:34 PM Document presentation format: A4-Papier (210x297 mm) Company: Hogwarts Other titles – PowerPoint PPT presentation

Number of Views:79
Avg rating:3.0/5.0
Slides: 23
Provided by: Martin788
Category:

less

Transcript and Presenter's Notes

Title: Higher Order Perl


1
Higher Order Perl
Vortrag über das Buch von Marc Jason Dominus
  • Martin Busik
  • martin.busik_at_busik.de

2
Softwareentwicklung ist geprägt durch Hypes
3
Sie als Perl-Programmierer sind starken
Vorurteilen ausgesetzt
  • ... perl is a write-once language

4
Räumen Sie die Vorurteile aus, in dem sie
Konzepte der FP nutzen
5
Konzepte der Funktionalen Programmierung können
in Perl verwendet werden
  • asub sub ...
  • csub (...) ? asub \bsub
  • esub csub-gt(dsub,sub_2,..)
  • esub-gt(...)

6
Das HOP-Buch ändert Ihre Art zu programmieren
  • vielleicht sogar ihr Verständnis der
    Programmierung

7
Der Schlüssel zu FP in Perl sind Closures
  • sub add my a shiftsub
  • my b shift a b

add5 add(5) print add5-gt(7)
8
Mit Closures können Sie globale Variablen
eliminieren
  • SIG__WARN__ commonLogging(opt-gtL 3)
  • warn 5, " Starte xyz"

9
Auch ohne globale Variablen haben Sie einen
"Zustand"
  • getNextId sequenceGenerator(5)
  • a getNextId() a enthält 5
  • b getNextId() b enthält 6

10
Trennen Sie Implementierung und Caching
  • sub rgb2cmyk
  • my(r,g,b) _at__
  • ..
  • sub rgb2cmyk_cached wrap(\rgb2cmyk)
  • rgb2cmyk_cached-gt(_at_color)

11
Nutzen Sie Memoization für rekursive Funktionen
  • sub asub
  • n shift
  • asub(--n) if n gt 0
  • asub wrap(\asub)
  • asub(5)

sub asub n shift asub(--n) if n gt
0 use Memoize memoize asub asub(5)
12
Nutzen Sie Dispatch-Tabellen
dt new gt sub..., p gt sub..., q
gt sub... c dt-gtp die ".." unless
ref(c) c-gt()
  • if(p eq "new")
  • ...
  • elsif(p eq "p")
  • ...
  • elsif(p eq "q")
  • ...
  • else die ".."

13
Nutzen Sie Dispatch-Tabellen mit und ohne
Closures
  • sub asub my (...) _at__ my f1sub .. my
    f2sub ... f1-gt(..)

my dt fall1 gt f1, fall2 gt f2, a
dt-gtp a-gt(...)
14
Verwenden Sie Iteratoren
  • i erzeuge_iterator(...)
  • e1 i-gt()
  • e2 i-gtnext()
  • e3 i-gt('next')
  • i-gthasNext()
  • i-gt('hasNext?')
  • while(my e i-gt())

15
Verwenden Sie Iteratoren... aber nicht nur als
for-Ersatz
  • _at_s (...)
  • for(i0ilt_at_si)
  • operation(si)
  • _at_s (...)
  • i arr_iter(_at_s)
  • while(e i-gt())
  • operation(e)

16
Verwenden Sie Iteratoren... eliminieren Sie
Schleifen
  • _at_s (...)
  • i 0
  • while(i lt _at_s)
  • op1(si) or last
  • while(i lt _at_s)
  • op2(si) or last
  • _at_s (...)
  • i arr_iter(_at_s)
  • op1(i)
  • op2(i)

17
Definieren Sie Operationen auf Iteratoren
i igrep _-gt0/raute/i ai e i-gt()
i imap inh gt _ ai e i-gt()
18
Wandeln Sie Rekursion in Iteration um
  • ... wenn Sie die Abbruchbedinung erst zur
    Laufzeit formulieren wollen

... wenn die Ergebnismenge unendlich ist
19
Currying kann zur Code-Wieder- verwendung genutzt
werden
  • sub reduce (_at_) ...
  • summe reduce(ab,0,_at_arr)
  • produkt reduce(ab,1,_at_arr)
  • sumF reduce(ab,0)
  • summe sumF(_at_arr)
  • spFreduce(ab,ab,0,1)

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

21
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
22
Danke für Ihre Aufmerksamkeit!
martin.busik_at_busik.de
Write a Comment
User Comments (0)
About PowerShow.com