Algorithmen und Programmierung I Funktionale Programmierung

Algorithmen und Programmierung I Funktionale Programmierung WS 2012/2013 Prof. Dr. Margarita Esponda ALP I: M. Esponda, 1. Vorlesung 1 Inhalt In...
Author: Helmut Lorentz
4 downloads 2 Views 3MB Size
Algorithmen und Programmierung I Funktionale Programmierung

WS 2012/2013 Prof. Dr. Margarita Esponda

ALP I: M. Esponda, 1. Vorlesung

1

Inhalt

Inhalt 1. Einführung in die Funktionale Programmierung (Haskell): 2. Grundlagen der Berechenbarkeit: 3. Das Beweisen von Programmeigenschaften: 4. Implementierung und Programmiertechnik:

ALP I: M. Esponda, 1. Vorlesung

2

Inhalt

1. Einführung in die Funktionale Programmierung • Ausdrücke und Primitive Datentypen • Funktionsdefinitionen • Listen, Tupel, Zeichenketten • Rekursion vs. Iteration • Such- und Sortieralgorithmen • Funktionen höherer Ordnung • Polymorphie • Typsystem, -herleitung und -überprüfung • Algebraische und abstrakte Datentypen

ALP I: M. Esponda, 1. Vorlesung

3

Inhalt

2. Grundlagen der Berechenbarkeit • Lambda-Kalkül • Kombinatoren • Turing-Maschine • Registermaschine • Primitive Rekursion • µ-Rekursion

ALP I: M. Esponda, 1. Vorlesung

4

Inhalt

3. Das Beweisen von Programmeigenschaften

• Termersetzung • Strukturelle Induktion • Terminierung, Implementierung und Programmiertechnik

ALP I: M. Esponda, 1. Vorlesung

5

Inhalt

4. Implementierung und Programmiertechnik

• Auswertungsstrategien für funktionale Programme • Modularer Programmentwurf

ALP I: M. Esponda, 1. Vorlesung

6

Literatur

Literatur ✴

The Craft of Functional Programming Third Edition. 2011. Addison-Wesley. Pearson. Simon Thompson.



Real World Haskell O'Reilly. 2009. Bryan O'Sullivan, Don Stewart, and John Goerzen.



Programming in Haskell Cambridge University Press, 2007. Graham Hutton.

ALP I: M. Esponda, 1. Vorlesung

7

Vorlesung & Übungen

Vorlesungen & Übungen Grundlegende Regeln zum Erfolg sind: 1. Regelmäßige und aktive Teilnahme in der Vorlesung Fragen stellen!

2. Regelmäßige und aktive Teilnahme an den Übungen Selbständige Lösung der Übungsblätter!

ALP I: M. Esponda, 1. Vorlesung

8

Mitschriften

Warum ist Mitschreiben wichtig?

Das Mitschreiben hat folgende Vorteile: ✴

Es erhöht die Aufmerksamkeit und fördert die Konzentration



Es regt dazu an, sich aktiv zu beteiligen



Es individualisiert den Lernstoff und bildet eine gute Grundlage für die Klausurvorbereitung

Fragen zuerst aufzuschreiben hat viele Vorteile.

ALP I: M. Esponda, 1. Vorlesung

9

Vorlesung & Übungen

Tutoren

Lucas Jacob

? ?

Simon Tippenhauer

?

Nicolas Lehmann

Oliver Wiese

Terese Haimberger

ALP I: M. Esponda, 1. Vorlesung

? ? 10

Kriterien des Leistungsnachweises

Kriterien für die Bestätigung der aktiven Teilnahme: 1. Eine regelmäßige Teilnahme an den Laborterminen ist unerlässlich. 2. Die Abgabe der Übungsblätter erfolgt montags um 10:10 Uhr. Nach diesem Termin abgegebene Übungsblätter werden nicht berücksichtigt. 3. Jeder Student muss an mindestens n-2 Übungsterminen anwesend sein. 4. Jeder Student muss n-2 Übungsblätter bestehen. Ein Übungsblatt gilt als bestanden, wenn man mind. 40% der zu erreichenden Punkte erreicht hat. 5. Jeder Student muss 60% der maximal erreichbaren Punktzahl aus allen Übungsblättern erreichen. 6. Jeder Student muss mindestens zwei Mal seine Lösungen vorrechnen. Wer jeweils vorrechnen muss, wird per Zufall am Anfang des jeweiligen Tutoriums entschieden.

ALP I: M. Esponda, 1. Vorlesung

11

Kriterien des Leistungsnachweises

Regelung für die Notenvergabe Die Prüfungsnote ergibt sich aus dem Wert folgenden Ausdrucks

⎛z+k z+n ⎞ max ⎜ , k, , n⎟ ⎝ 2 ⎠ 2

            

Dabei sind:

z - die Anzahl der erreichten Punkte in der Zwischenklausur (Stoff der ersten Semesterhälfte)  k - die Anzahl der erreichten Punkte in der Endklausur (Stoff des ganzen Semesters)  n - die Anzahl der erreichten Punkte in der Nachklausur (Stoff des ganzen Semesters) Zum Bestehen der Prüfung muss dieser Wert mindestens 50 Punkte betragen.  Jede Klausur hat dabei eine maximale Punktzahl von 100.

ALP I: M. Esponda, 1. Vorlesung

12

Kriterien des Leistungsnachweises

Verbesserungsmöglichkeiten • Zusätzlich ist es den Teilnehmern möglich durch besonders

aktive mündliche Teilnahme an den Tutorien die Gesamtnote um maximal 0,7 zu verbessern. Diese Bewertung wird von den Tutoren individuell vorgenommen. • Durch diese Verbesserung kann ein Bestehen der Klausur

nicht erreicht werden. • Die beste zu erreichende Note ist 1,0.

ALP I: M. Esponda, 1. Vorlesung

13

Fragen

Fragen Inhaltliche Fragen sind immer willkommen – während und nach jeder Vorlesung – in der Sprechstunde (Freitags 8 -11)

ALP I: M. Esponda, 1. Vorlesung

14

Keine Laptops

NO iPADS NO MUSIKGeräte NO LAPTOPS

NO HANDYS

ALP I: M. Esponda, 1. Vorlesung

15

Homepage

Homepage http://www.inf.fu-berlin.de/lehre/WS12/ALP1/ Vorlesungsfolien Literaturliste Übungen Zusätzliches Material wichtige Nachrichten [email protected] Sprechstunde: Fr. 8:00 - 11:00 Uhr Raum 161

ALP I: M. Esponda, 1. Vorlesung

16

Homepage

Warum Funktionales Programmieren? Warum Haskell? Wie so nicht F#? Warum nicht Dart oder Ceylon oder Rust?

ALP I: M. Esponda, 1. Vorlesung

17

Wie viele Programmiersprachen? Es gibt mehr als 2000 Programmiersprachen, die im kommerziellen Bereich bekannt sind oder gewesen sind. ✴

mehr als 200 davon haben sich im Laufe der Geschichte stärker verbreitet



(einige) Firmen entwickeln eigene private Sprachen



es gibt viele akademische Programmiersprachen



und es kommen immer mehr Programmiersprachen hinzu

ALP I: M. Esponda, 1. Vorlesung

18

Einführung

Kurz über die Geschichte der Programmiersprachen

Sammet, J. Programming Languages. History and Fundamentals. Prentice Hall, 1969.

ALP I: M. Esponda, 1. Vorlesung

19

30er Jahre

Erste Programmiersprache

Alonzo Church 1903-1995

Stephen C. Kleene 1909-1994

λ − Kalkül Lisp 1958

Funktionale Programmiersprachen

Lambda-Kalkül ✴ universelle ✴ nur

abstrakte Programmiersprache

FP

Miranda

Haskell

die Hardware fehlte

ALP I: M. Esponda, 1. Vorlesung

20

30er Jahre Alan Turing

(1912-1954)

“On computable numbers, with an application to the Entscheidungsproblem”. 1936

Turing-Maschine Ein Modell, um die Klasse der intuitiv berechenbaren Funktionen zu bilden.

ALP I: M. Esponda, 1. Vorlesung

21

Einführung

Erste Programmgesteuerte Maschine Lochkarten-Steuerung der Jacquard-Maschine

Jacquard Looms 1801

"Programm

ALP I: M. Esponda, 1. Vorlesung

22

Einführung

Programmgesteuerter Rechner

1941

Konrad Zuse

Programm

Maschinensprache

ALP I: M. Esponda, 1. Vorlesung

23

Einführung

Programmierung Steinzeit der elektronischen Computer

eigentlich kein Programm ALP I: M. Esponda, 1. Vorlesung

24

Einführung

40er Jahre Das Wort Software existierte noch nicht.



die ENIAC hatte keine Software



am Anfang stand "Layette" bei der UNIVAC Corporation für die Programme



Wurde später es durch das Wort "Software" ersetzt

ALP I: M. Esponda, 1. Vorlesung

25

Einführung

Konzepte imperativer Programmierung Die eigentliche Geschichte der imperative Programmiersprachen begann mit: • dem Konzept der von Neumann-Maschine, die 1945 die Notwendigkeit eines gespeicherten Programms postulierte. • und mit dem Konzept des "conditional control transfer" • If-then-Anweisung • looped-Anweisungen • Subroutines (Funktionen)

ALP I: M. Esponda, 1. Vorlesung

26

Einführung

Was ist ein Programm? Imperative Programmiersprachen



Ein Programm ist eine Folge von Anweisungen, die auf einer Maschine ausgeführt werden können.



Ein Programm ist die Formulierung eines Algorithmus in einer konkreten Programmiersprache.



Ein OO-Programm ist ein System kooperierender Objekte.

ALP I: M. Esponda, 1. Vorlesung

27

50er Jahre Imperative Programmiersprachen Maschinensprache

Assembler-

Höhere

Programmiersprache

Programmiersprachen

0101000101101011

LOAD

#1 C

0101001011110101

LOAD

#2 B

0111000100100011

MULT

#1 #2 #3

0101010001010110

LOAD

#4 A

0010001101000001

ADD

#3 #4 #1

0000000101101011

STORE #1 C

C

=

A + B*C

....

ALP I: M. Esponda, 1. Vorlesung

28

Imperative Programmiersprachen Programme

LOAD

CPU

Anweisungen

ProgrammsteuerungsEinheit

Register

ALU

#1 5

STORE #3 7 ADD #1 #2 #3 JUMP 100

Daten

Daten

Arithemitc and Logic Unit (Rechenwerk) Speicher

ALP I: M. Esponda, 1. Vorlesung

29

Einführung

Imperatives Programmieren • Ältestes und populärstes Programmierparadigma – Fortran, Cobol, Algol, C, Basic, Pascal, Modula, Java, usw. • Widerspiegelt die dahinter stehende HardwareArchitektur – von Neumann Maschine – gespeichertes Programm + Daten

ALP I: M. Esponda, 1. Vorlesung

30

Einführung

Höhere Programmiersprachen 1955

Grace Hopper John Backus

1959

Cobol FORmula TRANslator

ALP I: M. Esponda, 1. Vorlesung

COmmon Business Oriented Language

31

Einführung

Höhere Programmiersprachen

John McCarthy

1958

Lisp LISt Processor

ALP I: M. Esponda, 1. Vorlesung

32

Einführung

Lisp 1958 schrieb McCarthy ein Paper mit einem einfachen Lisp- Interpreter, der wiederum in Lisp geschrieben war. Lambda-Kalkül ist die grundlegende Basis für seine minimalen Lisp-Funktionen. Es gibt keinen grundsätzlichen Unterschied zwischen Daten und Programmanweisungen. Dies ermöglicht unter anderem, Programme zur Laufzeit beliebig zu manipulieren Ein Lisp-Programm ist eine Liste, die einen abstrakten Syntaxbaum darstellt. ( + (+ a (* b c) d ))

ALP I: M. Esponda, 1. Vorlesung

33

Geschichtliche Einführung

Höhere Programmiersprachen

Deklarative Sprachen

Was?

Imperative Sprachen

Wie? Prozedurale

Funktionale Sprachen

Logische Sprachen

Objektorientierte Programmiersprachen

Aspektorientierte Programmiersprachen

in ALP I

ALP I: M. Esponda, 1. Vorlesung

in ALP II

34

Geschichtliche Einführung

deklarativ

vs.

- Sprachen basieren auf einem mathematischen Formalismus

imperativ - Sprachen sind von der dahinterstehenden Hardware geprägt

- Wissen über ein Problem rein deklarativ darstellbar - Intelligentes System, das Fragen an das Programm beantworten

- Befehlssequenz (Zustände) - zeitlicher Ablauf im Programm sichtbar

kann

kompakter

effizienter

robuster einfacher ALP I: M. Esponda, 1. Vorlesung

35

Einführung

Was ist ein Programm? Funktionale Programmiersprachen



Ein Funktionales Programm ist eine Menge von Funktionsdefinitionen. ✴



Eine Funktion bindet eine Variable an einen Wert.

Die Ausführung des Programms wird mit der Auswertung eines Ausdrucks gestartet, die mit Hilfe der Funktionsmenge erfolgt.

ALP I: M. Esponda, 1. Vorlesung

36

Geschichtliche Einführung

Deklarative Programmiersprachen Programm in Prolog Mutter( luise, maria ). Mutter( anne, maria ). Mutter( maria, andrea ). Vater( luise, peter ). Vater( maria, joachim ). Oma( X, Y ) :- Mutter( X, Z ), Mutter( Z, Y ). Oma( X, Y ) :- Vater( X, Z ), Mutter( Z, Y ). Geschwister( X, Y ) :- Mutter( X, Z ), Mutter( Y, Z ). Geschwister( X, Y ) :- Vater( X, Z ), Vater( Y, Z ). ?Oma( anne, andrea ).

ALP I: M. Esponda, 1. Vorlesung

37

In der realen Welt verwendete Sprachen

Normalisierte Ergebnisse aus der Popularität in: - Open-Source-Projekte - Powell`s Books - Job-Angebot - Popularität in der Software-Industrie - Google Code Search - usw. Quelle: http://langpop.com/ (DedaSys. Open Source Consulting) 2011

ALP I: M. Esponda, 1. Vorlesung

38

TIOBE Programming Community Index (Oktober 2012)

Beliebteste Programmiersprachen

ALP I: M. Esponda, 1. Vorlesung

39

Einführung

Deklarative Programmiersprachen 1950

1960

1970

1980

LISP

1990

2000

COMMON LISP

2010

COMMON LISP ANSI

SCHEME SASL FP

FL

HOPE Erlang

ML

MIRANDA

HASKELL Clean

Caml PROLOG ALP I: M. Esponda, 1. Vorlesung

Haskell Curry 1900-1982

OCaml PARLOG 40

Einführung

Software-Krise • John Bakus • 1977 • Lecture for the ACM Turing award session "Can Programming be liberated from the von Neumann Style? A Functional Style and its Algebra of Programs“ • FP (Funktionale Programmiersprache)

ALP I: M. Esponda, 1. Vorlesung

41

Einführung

Warum Haskell? ✴

sehr einfach



Programme sind klein, übersichtlich und einfacher zu warten



sehr nützlich als Spezifikationssprache



Programmeigenschaften sind einfacher zu beweisen



Algorithmen können auf einem höheren Niveau formuliert und analysiert werden



Moderne Programmiersprache



mit ständiger Verbreitung im kommerziellen Bereich

ALP I: M. Esponda, 1. Vorlesung

42

Einführung

Warum Haskell? ✴

Haskell ist geeignet an Stellen, wo Sicherheit und fehlerfreie Software vor Geschwindigkeit steht.

In Haskell implementierte Software: • Xmonad windows manager für Linux • Cryptol Language (www.cryptol.net) • Facebook (Projekte und Tools) • usw.

Programmiersprachen, die das Funktionale Paradigma unterstützen sind im Trend. Beispiel: F#, Erlang und Scale.

ALP I: M. Esponda, 1. Vorlesung

43

Funktionale Programmierung

The International Obfuscated C Code Contest /* + + + + [

>i>n[t */ #include /*2w0,1m2,]_r>i>=>(['0n1'0)1; */int/**/main(int/**/n,char**m){FILE*p,*q;int A,k,a,r,i/* #uinndcelfu_dseti/_*/;char*d="P%" "d\n%d\40%d"/**/ "\n%d\n\00wb+",b[1024],y[]="yuriyurarararayuruyuri*daijiken**akkari~n**" "/y*u*k/riin

Suggest Documents