• Keine Ergebnisse gefunden

Praktische Informatik 3: Einführung in die Funktionale Programmierung

N/A
N/A
Protected

Academic year: 2022

Aktie "Praktische Informatik 3: Einführung in die Funktionale Programmierung"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Praktische Informatik 3: Einführung in die Funktionale Programmierung

Vorlesung vom 27.10.2010: Einführung

Christoph Lüth & Dennis Walter

Universität Bremen Wintersemester 2010/11

Rev. 1074 1 [20]

Personal

I Vorlesung: Christoph Lüth<cxl@informatik.uni-bremen.de>

Cartesium 2.046, Tel. 64223

I Tutoren:

Diedrich Wolter<dwolter@informatik.uni-bremen.de>

Bernd Gersdorf<Bernd.Gersdorf@dfki.de>

Rene Wagner<Rene.Wagner@dfki.de>

Christian Maeder<Christian.Maeder@dfki.de>

Simon Ulbricht<tekknix@informatik.uni-bremen.de>

I Fragestunde: Berthold Hoffmann

<hof@informatik.uni-bremen.de>

I Website:www.informatik.uni-bremen.de/˜cxl/lehre/pi3.ws10.

2 [20]

Termine

IVorlesung: Mi 12 – 14, NW1 H 1 – H0020

ITutorien: Mo 10-12 MZH 5210 Christian Maeder Mo 16-18 MZH 1380 Rene Wagner Di 8-10 MZH 1100 Diedrich Wolter Di 10-12 MZH 1380 Diedrich Wolter Di 10-12 MZH 1400 Bernd Gersdorf Di 12-14 MZH 1450 Simon Ulbricht

IFragestunde: Do 9 – 11 Berthold Hoffmann (Cartesium 2.048)

IAnmeldungzu den Übungsgruppen über stud.ip

3 [20]

Übungsbetrieb

I Ausgabe der Übungsblätter über die WebseiteDonnerstag Mittag

I Besprechung der Übungsblätter in den Tutorien

I Bearbeitungszeit: eine Woche

I Abgabe: elektronisch bis Montag um 10:00

I ElfÜbungsblätter (voraussichtlich) plus 0. Übungsblatt

I Übungsgruppen: max.drei Teilnehmer(nur in Ausnahmefällen vier)

4 [20]

Scheinkriterien

IVonnÜbungsblättern werdenn−1 bewertet (geplantn=11)

IInsgesamtmind. 50%aller Punkte

IFachgespräch(Individualität der Leistung) am Ende

5 [20]

Spielregeln

I Quellen angebenbei

IGruppenübergreifenderZusammenarbeit;

IInternetrecherche, Literatur, etc.

I ErsterTäuschungsversuch:NullPunkte

I ZweiterTäuschungsversuch:Kein Schein.

I Deadline verpaßt?

ITriftigerGrund (z.B. Krankheit mehrerer Gruppenmitglieder)

IVorherankündigen, sonstnullPunkte.

6 [20]

Fahrplan

ITeil I: Funktionale Programmierung im Kleinen

IEinführung

IFunktionen und Datentypen

IRekursive Datentypen

ITypvariablen und Polymorphie

IFunktionen höherer Ordnung

ITypinferenz

ITeil II: Funktionale Programmierung im Großen ITeil III: Funktionale Programmierung im richtigen Leben

7 [20]

Warum funktionale Programmierung lernen?

I Denken inAlgorithmen, nicht inProgrammiersprachen I Abstraktion:Konzentration auf das Wesentliche I WesentlicheElemente moderner Programmierung:

IDatenabstraktionundFunktionale Abstraktion

IModularisierung

ITypisierungundSpezifikation

I Blick über den Tellerrand — Blick in die Zukunft I Studium6=Programmierkurs — was kommt in 10 Jahren?

8 [20]

(2)

Warum Haskell?

IModerneSprache

IStandardisiert, mehrereImplementationen

IInterpreter:hugs

ICompiler:ghc,nhc98

IReinfunktional

9 [20]

Geschichtliches

I Grundlagen1920/30

IKombinatorlogik undλ-Kalkül (Schönfinkel, Curry, Church) I ErsteProgrammiersprachen1960

ILISP(McCarthy),ISWIM(Landin) I WeitereProgrammiersprachen 1970– 80

IFP(Backus);ML(Milner, Gordon);Hope(Burstall);Miranda(Turner) I Konsolidierung1990

ICAML,Formale Semantikfür Standard ML

IHaskellalsStandardsprache I Hype2010

IScala,F#, Clojure

10 [20]

Referenzielle Transparenz

IProgramme als Funktionen

P:EingabeAusgabe

IKeine veränderlichenVariablen— kein versteckterZustand

IRückgabewert hängt ausschließlich von Werten der Argumente ab, nicht vom Aufrufkontext (referentielle Transparenz)

IAlleAbhängigkeiten explizit

11 [20]

Definition von Funktionen

I Zwei wesentlicheKonstrukte:

IFallunterscheidung

IRekursion Satz

Fallunterscheidung und Rekursion auf natürlichen Zahlen sind turing-mächtig.

I Beispiel:

fac(n) =

(1 wennn=0 n·fac(n−1) sonst I Funktion kannpartiellsein.

12 [20]

Auswertung als Ausführungsbegriff

IProgrammewerden durchGleichungendefiniert:

f(x) =E

IAuswertungdurchAnwendender Gleichungen:

ISuchen nachVorkommenvonf, e.g.f(t)

If(t)wird durchE t

x

ersetzt

IAuswertung kanndivergieren!

IOperational(Ausführungsbegriff) vs.denotational(math. Modell) INichtreduzierbare Ausdrücke sindWerte

IVorgebeneneBasiswerte:Zahlen,Zeichen

IDefinierteDatentypen:Wahrheitswerte,Listen, . . .

13 [20]

Programmieren mit Funktionen

I Programmewerden durchGleichungendefiniert:

f a c n = i f n == 0 then 1

e l s e n∗ f a c ( n−1)

I Auswertung durchReduktionvonAusdrücken:

fac(2) if 2 == 0 then 1 else 2* fac(2-1) 2* fac(2- 1)

2* fac(1)

2* (if 1== 0 then 1 else 1* fac(1- 1)) 2* 1* fac(1- 1)

2* 1* fac(0)

2* 1* (if 0== 0 then 1 else 0* fac(0- 1))

2* 1* 1 2

14 [20]

Nichtnumerische Werte

IRechnen mitZeichenketten

r e p e a t n s == i f n== 0 then " "

e l s e s ++ r e p e a t ( n−1) s IAuswertung:

repeat 2 "hallo "

if 2 == 0 then "" else "hallo " ++ repeat (2-1) "hallo "

"hallo "++ repeat (2-1) "hallo "

"hallo "++ if 2-1 == 0 then ""

else "hallo "++ repeat ((2-1)-1) "hallo "

"hallo "++ ("hallo "++ repeat ((2-1)-1) "hallo ")

"hallo "++ ("hallo "++ if ((2-1)-1) == 0 then ""

else repeat (((2-1)-1)-1) "hallo ")

"hallo "++ ("hallo " ++ "")

"hallo hallo "

15 [20]

Typisierung

I Typenunterscheiden Arten von Ausdrücken:

repeat n s =. . . n Zahl s Zeichenkette I VerschiedeneTypen:

IBasistypen(Zahlen, Zeichen)

Istrukturierte Typen(Listen, Tupel, etc) I WozuTypen?

ITypüberprüfungwährendÜbersetzungerspartLaufzeitfehler

IProgrammsicherheit

16 [20]

(3)

Signaturen

IJede Funktion hat eineSignatur f a c :: I n t→ I n t

r e p e a t :: I n t→ S t r i n g→ S t r i n g

ITypüberprüfung

Ifacnur aufIntanwendbar, Resultat istInt

Irepeatnur aufIntundStringanwendbar, Resultat istString

17 [20]

Übersicht: Typen in Haskell

Typ Bezeichner Beispiel

Ganze Zahlen Int 0 94 -45

Fließkomma Double 3.0 3.141592

Zeichen Char ’a’ ’x’ ’\034’ ’\n’

Zeichenketten String "yuck" "hi\nho\"\n"

Wahrheitswerte Bool True False

Funktionen a-> b I Spätermehr.Vielmehr.

18 [20]

Imperativ vs. Funktional

IImperativeProgrammierung:

IZustandsübergangΣ→Σ, Lesen/Schreiben von Variablen

IKontrollstrukturen: Fallunterscheidung if. . .then. . .else Iteration while. . .

IFunktionaleProgrammierung:

IFunktionenf:EA

IKontrollstrukturen: Fallunterscheidung Rekursion

19 [20]

Zusammenfassung

I ProgrammesindFunktionen, definiert durchGleichungen

IReferentielle Transparenz

Ikeinimpliziter Zustand, keineveränderlichen Variablen

I AusführungdurchReduktionvon Ausdrücken I Typisierung:

IBasistypen: Zahlen, Zeichen(ketten), Wahrheitswerte

IStrukturierte Typen: Listen, Tupel

IJede Funktionfhat eine Signaturf :: a-> b

20 [20]

Referenzen

ÄHNLICHE DOKUMENTE

I Tutorien: Mi 08 – 10 MZH 1110 Sören Schulze Mi 10 – 12 MZH 1470 Sandor Herms Mi 12 – 14 MZH 1110 Henrik Reichmann Mi 14 – 16 SFG 1020 Felix Thielke Do 08 – 10 MZH 1110 Jan

I Tutorien: Mi 16 – 18 OAS 3000 Marcus Ermler Do 8 – 10 MZH 1110 Marcus Ermler Do 10 – 12 MZH 7260 Christian Maeder Do 10 – 12 MZH 1470 Diedrich Wolter Do 12 – 14 MZH 1450

12 9 Inffeldgasse 18. Elektrotechnik

Poiché vi sono ancora modelli, come ad esempio i veicoli in stock, che dispongono solamente di dati NEDC e per i quali non possono essere calcolati valori WLTP, per

[r]

[r]

Maxi Blaha | Schauspiel &amp; Gesang Alexander Hauer | Regie Julia Klug | Kostüme Wolfgang Kogert | Orgel PHACE.. Walter Seebacher |

Da der ode45 solver ein explizites Verfahren ist, müssen die Zeitschritte in Richtung des Eigenwertes − 10 aus Stabilitätsproblemen sehr klein gewählt werden, anderer- seits