• Keine Ergebnisse gefunden

Praktische Informatik 3: Funktionale Programmierung Vorlesung 14 vom 31.01.15: Rückblick & Ausblick

N/A
N/A
Protected

Academic year: 2022

Aktie "Praktische Informatik 3: Funktionale Programmierung Vorlesung 14 vom 31.01.15: Rückblick & Ausblick"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Praktische Informatik 3: Funktionale Programmierung Vorlesung 14 vom 31.01.15: Rückblick & Ausblick

Christoph Lüth Universität Bremen Wintersemester 2016/17

15:38:11 2017-01-31 1 [32]

Fahrplan

I Teil I: Funktionale Programmierung im Kleinen I Teil II: Funktionale Programmierung im Großen I Teil III: Funktionale Programmierung im richtigen Leben

IAktionen und Zustände

IMonaden als Berechnungsmuster

IDomänenspezifische Sprachen (DSLs)

IScala — Eine praktische Einführung

I Rückblich & Ausblick

PI3 WS 16/17 2 [32]

Organisatorisches

I Bitte an derOnline-Evaluationteilnehmen (stud.ip)

PI3 WS 16/17 3 [32]

Inhalt

I Fachgespräche und Prüfungen

I Rückblick und Ausblick

PI3 WS 16/17 4 [32]

Fachgespräche und Prüfungen

PI3 WS 16/17 5 [32]

Fachgespräche

I Fachgespräche bestehen aus der schriftlichen, nichtelektronischen Bearbeitung einer kurzenProgrammieraufgabe

IAbstufung nach Vornote:A(1– 1.7),B(2.0 – 3.0),C(3.3 – 4.0)

I Beispielfragen auf der Webseite (unter “Übungsaufgaben”)

PI3 WS 16/17 6 [32]

Beispielfrage (C)

Definieren Sie eine Funktionformat, die eine Zahl in einer Zeichenkette gegebener Länge rechtsbündig aus- gibt.

Bsp. format 4 xy "␣␣xy"

PI3 WS 16/17 7 [32]

Beispielfrage (B)

Definieren Sie eine Funktionmean, die den arithme- tischen Durchschnitt einer Liste von ganzen Zahlen berechnet.

Bsp.mean [2,1,5,4,3] 3.0

PI3 WS 16/17 8 [32]

(2)

Beispielfrage (A)

Zwei Int-Listen sollen ähnlichheißen, wenn Sie die gleichen Zahlen unabhängig von ihrer Reihenfolge und Häufigkeit enthalten. Schreiben Sie eine Test- funktion similar dafür.

Bsp. similar [3,2,2,1,3] [1,2,3] True

PI3 WS 16/17 9 [32]

Mündliche Prüfung

I Dauer: in der Regel 30 Minuten

I Einzelprüfung, ggf. mit Beisitzer

I Inhalt: Programmieren mit Haskell und Vorlesungsstoff

I Ablauf: “Fachgespräch plus”

IEinstieg mit leichter Programmieraufgabe wie im Fachgespräch

IDaran anschließend Fragen über den Stoff

PI3 WS 16/17 10 [32]

Verständnisfragen

Auf allen Übungsblättern finden sich Verständnisfragen zur Vorlesung.

Diese sind nicht Bestandteil der Abgabe, können aber im Fachgesprach thematisiert werden. Wenn Sie das Gefühl haben, diese Fragen nicht sicher beantworten zu können, wenden Sie sich gerne an Ihren Tutor, an Berthold Hoffmann in seiner Fragestunde, oder an den Dozenten.

PI3 WS 16/17 11 [32]

Verständnisfragen

1.Was bedeutet Striktheit, und welche in Haskell definierbaren Funktionen haben diese Eigenschaft?

2.Was ist ein algebraischer Datentyp, und was ist ein Konstruktor?

3.Was sind die drei Eigenschaften, welche die Konstruktoren eines algebraischen Datentyps auszeichnen, was ermöglichen sie und warum?

PI3 WS 16/17 12 [32]

Verständnisfragen: Übungsblatt 2

1.Welche zusätzliche Mächtigkeit wird durch Rekursion bei algebraischen Datentypen in der Modellierung erreicht? Was läßt sich mit rekursiven Datentypen modellieren, was sich nicht durch nicht-rekursive Datentypen erreichen läßt?

2.Was ist der Unterschied zwischen Bäumen und Graphen, in Haskell modelliert?

3.Was sind die wesentlichen Gemeinsamkeiten, und was sind die wesentlichen Unterschiede zwischen algebraischen Datentypen in Haskell, und Objekten in Java?

PI3 WS 16/17 13 [32]

Verständnisfragen: Übungsblatt 3

1.Was ist Polymorphie?

2.Welche zwei Arten der Polymorphie haben wir kennengelernt, und wie unterschieden sie sich?

3.Was ist der Unterschied zwischen Polymorphie in Haskell, und Polymorphie in Java?

PI3 WS 16/17 14 [32]

Verständnisfragen: Übungsblatt 4

1.Was kennzeichnet strukturell rekursive Funktionen, wie wir sie in der Vorlesung kennengelernt haben, und wie sind sie durch die Funktion f o l d rdarstellbar?

2.Welche anderen geläufigen Funktionen höherer Ordnung kennen wir?

3.Was istη-Kontraktion, und warum ist es zulässig?

4.Wann verwendet manf o l d r, wannf o l d l, und unter welchen Bedingungen ist das Ergebnis das gleiche?

PI3 WS 16/17 15 [32]

Verständnisfragen: Übungsblatt 5

1. f o l d rist die „kanonische einfach rekursive Funktion“ (Vorlesung).

Was bedeutet das, und warum ist das so? Für welche Datentypen gilt das?

2.Wann kannf o l d r f a xsauch für ein zyklisches Argumentxs(bspw.

eine zyklische Liste) terminieren?

3.Warum sind endrekursive Funktionen im allgemeinen schneller als nicht-endrekursive Funktionen? Unter welchen Voraussetzungen kann ich eine Funktion in endrekursive Form überführen?

PI3 WS 16/17 16 [32]

(3)

Verständnisfragen: Übungsblatt 6

1.Was ist ein abstrakter Datentyp (ADT)?

2.Was sind Unterschiede und Gemeinsamkeiten zwischen ADTs und Objekten, wie wir sie aus Sprachen wie Java kennen?

3.Wozu dienen Module in Haskell?

PI3 WS 16/17 17 [32]

Verständnisfragen: Übungsblatt 7

1.Wie können wir die Typen und Operationen der Signatur eines abstrakten Datentypen grob klassifizieren, und welche Auswirkungen hat diese Klassifikation auf die zu formulierenden Eigenschaften?

2.Warum „finden Tests Fehler“, aber „zeigen Beweise Korrektheit“, wie in der Vorlesung behauptet? Stimmt das immer?

3.Müssen Axiome immer ausführbar sein? Welche Axiome wären nicht ausführbar?

PI3 WS 16/17 18 [32]

Verständnisfragen: Übungsblatt 8

1.Der DatentypStreamαist definiert als data Streamα= Consα (Streamα)

Gibt es für diesen Datentyp ein Induktionsprinzip? Ist es sinnvoll?

2.Welche nichtausführbaren Prädikate haben wir in der Vorlesung kennengelernt?

3.Wie kann man in einem Induktionsbeweis die Induktionsvoraussetzung stärken, und wann ist das nötig?

PI3 WS 16/17 19 [32]

Verständnisfragen: Übungsblatt 9

1.Warum ist die Erzeugung von Zufallszahlen eine Aktion?

2.Warum ist auch das Schreiben in eine Datei eine Aktion?

3.Was ist (bedingt durch den Mangel an referentieller Transparenz) die entscheidende Eigenschaft, die Aktionen von reinen Funktionen unterscheidet?

PI3 WS 16/17 20 [32]

Rückblick und Ausblick

PI3 WS 16/17 21 [32]

Warum funktionale Programmierung lernen?

I Funktionale Programmierung macht aus Programmierern Informatiker

I Blick über den Tellerrand — was kommt in 10 Jahren?

I Herausforderungender Zukunft

I Enthält diewesentlichenElemente moderner Programmierung

PI3 WS 16/17 22 [32]

Zusammenfassung Haskell

Stärken:

I Abstraktiondurch

I Polymorphieund Typsystem

I algebraischeDatentypen

I FunktionenhöhererOrdnung I Flexible Syntax

I Haskell alsMeta-Sprache I Ausgereifter Compiler I Viele Büchereien

Schwächen:

I Komplexität

I Büchereien

INicht immer gut gepflegt

I Vielim Fluß

IKeinstabilerundbrauchbarer Standard

I DivergierendeZiele:

IForschungsplattformund nutzbares Werkzeug

PI3 WS 16/17 23 [32]

Andere Funktionale Sprachen

I Standard ML(SML):

IStreng typisiert, strikte Auswertung

IStandardisiert, formal definierte Semantik

IDrei aktiv unterstütze Compiler

IVerwendet in Theorembeweisern (Isabelle, HOL)

Ihttp://www.standardml.org/

I Caml,O’Caml:

IStreng typisiert, strikte Auswertung

IHocheffizienter Compiler, byte code & nativ

INur ein Compiler (O’Caml)

Ihttp://caml.inria.fr/

PI3 WS 16/17 24 [32]

(4)

Andere Funktionale Sprachen

I LISPundScheme

I Ungetypt/schwach getypt

I Seiteneffekte

I Viele effiziente Compiler, aber viele Dialekte

I Auch industriell verwendet I Hybridsprachen:

I Scala (Functional-OO, JVM)

I F# (Functional-OO, .Net)

I Clojure (Lisp, JVM)

PI3 WS 16/17 25 [32]

Was spricht gegen funktionale Programmierung?

I MangelndeUnterstützung:

ILibraries, Dokumentation, Entwicklungsumgebungen

IWird besser (Scala). . .

I Programmierungnur kleiner Teil der SW-Entwicklung I Nichtverbreitet— funktionale Programmierer zuteuer I Konservatives Management

I“Nobody ever got fired for buying IBMSAP”

PI3 WS 16/17 26 [32]

Haskell in der Industrie

I Simon Marlow bei Facebook: Sigma — Fighting spam with Haskell

I Finanzindustrie: Barclays Capital, Credit Suisse, Deutsche Bank

I Bluespec: Schaltkreisentwicklung, DSL auf Haskell-Basis

I Galois, Inc: Cryptography (Cryptol DSL)

I Siehe auch: Haskell in Industry

PI3 WS 16/17 27 [32]

Funktionale Programmierung in der Industrie

I Scala:

ITwitter, Foursquare, Guardian, . . . I Erlang

Ischwach typisiert, nebenläufig, strikt

IFa. Ericsson (Telekom-Anwendungen), WhatsApp I FL

IML-artige Sprache

IChip-Verifikation der Fa. Intel I Python(und andere Skriptsprachen):

IListen, Funktionen höherer Ordnung (map, fold), anonyme Funktionen, Listenkomprehension

PI3 WS 16/17 28 [32]

Perspektiven funktionaler Programmierung

I Forschung:

I AusdrucksstärkereTypsysteme

I für effizienteImplementierungen

I und eingebauteKorrektheit(Typ als Spezifikation)

I Parallelität?

I Anwendungen:

I Eingebettetedomänenspezifische Sprachen

I ZustandsfreieBerechnungen (MapReduce, Hadoop, Spark)

I Big DataandCloud Computing

PI3 WS 16/17 29 [32]

If you liked this course, you might also like . . .

I Die VeranstaltungReaktive Programmierung(Sommersemester 2017)

IScala, nebenläufige Programmierung, fortgeschrittene Techniken der funktionalen Programmierung

I Wir suchenstudentische Hilfskräfteam DFKI, FB CPS

IScala als Entwicklungssprache I Wir suchenTutoren für PI3

IIm WS 2017/18 —meldet Euchbei Berthold Hoffmann (oder bei mir)!

PI3 WS 16/17 30 [32]

An Important Public Service Announcement

PI3 WS 16/17 31 [32]

Tschüß!

PI3 WS 16/17 32 [32]

Referenzen

ÄHNLICHE DOKUMENTE

I Für funktionale Programme: rekursiv definierte Funktionen.. Äquivalenz von operationaler und

I Besser: eine Typdefinition mit Funktionen, Instantiierung zu verschiedenen Typen. −→

Ein abstrakter Datentyp (ADT) besteht aus einem (oder mehreren) Typen und Operationen darauf, mit folgenden Eigenschaften:. I Werte des Typen können nur über die

3. Was sind die wesentlichen Gemeinsamkeiten, und was sind die wesentlichen Unterschiede zwischen algebraischen Datentypen in Haskell, und Objekten in Java?.. Welche

Praktische Informatik 3: Funktionale Programmierung Vorlesung 2 vom 21.10.2014: Funktionen und Datentypen..

contains :: Id→ Path→ Bool cat :: Path→ Path→ Path snoc :: Path→ Id → Path..

I Werte des Typen können nur über die bereitgestellten Operationen erzeugt werden. I Eigenschaften von Werten des Typen werden nur über die bereitgestellten

konstanter Aufwand ←→ beliebige Genauigkeit, wachsender Aufwand Haskell bietet die Auswahl:. I Int - ganze Zahlen als Maschinenworte (≥