• Keine Ergebnisse gefunden

Funktionale Programmierung (in Clojure) Einführung Burkhardt Renz

N/A
N/A
Protected

Academic year: 2021

Aktie "Funktionale Programmierung (in Clojure) Einführung Burkhardt Renz"

Copied!
18
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Funktionale Programmierung (in Clojure)

Einführung

Burkhardt Renz

Fachbereich MNI

Technische Hochschule Mittelhessen

Wintersemester 2014/15

(2)

Übersicht

Paradigmen von Programmiersprachen Paradigmen von Programmiersprachen Das imperative Paradigma

Das funktionale Paradigma Das relationale Paradigma Das objektorientierte Paradigma

Arten funktionaler Sprachen

Eigenschaften funktionaler Programmierung Literatur et al.

(3)

Paradigmen von Programmiersprachen

Paradigmakommt aus dem Griechischen und bedeutet

„Lehrbeispiel“, „Vorbild“, „Vorzeigestück“

Verwendet oft im Sinne von „grundlegende Denkweise“, „Leitbild“,

„Weltanschauung“

Bezüglich Programmiersprachen:

wie sieht man den Prozess einer Berechnung?

wie definiert man eine Berechnung?

wie definiert und verwendet man Daten?

(4)

Wichtigste Paradigmen

imperative Programmierung funktionale Programmierung

logische, bzw. relationale Programmierung objektorientierte Programmierung

(5)

Das imperative Paradigma

Von-Neumann-Architektur:

Speicher – Steuerwerk – Rechenwerk

Detaillierte Beschreibung, wie der Speicher sukzessive

modifiziert werden soll→imperativ(lat. imperare = befehlen) Programmierung durch Veränderung des Speicherzustands mittels Wertzuweisung

Maschinenorientierte Datenstrukturen

Beispiele: FORTRAN, Pascal, C – Summieren in Java

(6)

Das funktionale Paradigma

Programm ↔Berechnung einer Funktion basierend auf Alonzo Churchs λ-Kalkül

Funktionen sind „Bürger erster Klasse“ – können selbst Parameter oder Rückgabewert einer Funktion sein

Konstruktion von Funktionen mittels anderer Funktionen:

Funktionen höheren Typs

Referenzielle Transparenz: Ein Ausdruck entspricht seinem Wert und hat immer denselben Wert

Werte (immutable objects) statt zustandsbehaftete Objekte Beispiele: Lisp, ML, Haskell, Scheme, Erlang, Clojure – Summieren in Clojure

Auch eingebettet in objektorientierte Sprachen: JavaScript, C#, Java, Scala, Python, . . .

(7)

Das relationale Paradigma

Programmausführung ↔ Ableitungsprozess, Beweis

Programm spezifiziert die Fragestellung, nicht einen Weg zur Lösung

Keine lineare Berechnung: System sucht eine Bindung logischer Variablen, die die in der Spezifikation gestellten Bedingungen erfüllen

Mehrere Lösung (sogar unendlich viele) möglich

Beispiele: PROLOG, MiniKanren, core.logic in Clojure – siehe Relation für Addition

(8)

Das objektorientierte Paradigma

Programm zur Laufzeit ↔ Geflecht von Objekten, die durch Nachrichten interagieren

Objekte kapseln ihren Zustand, der durch Methoden/Nachrichten geändert wird

Klassen sind Vorlagen für Objekte, die zur Laufzeit instanziiert werden

Vererbung von Schnittstellen und Verhalten Polymorphismus

Beispiel: Smalltalk, C++, Java, C# – Stack in Java vs. Stack in Clojure

(9)

Übersicht

Paradigmen von Programmiersprachen Arten funktionaler Sprachen

Auswertungsart Syntax

Typisierung

Eigenschaften funktionaler Programmierung Literatur et al.

(10)

Auswertungsart

Strikte/applikative Auswertung

Erst werden die Parameter evaluiert unddann wird deren Wert an die Funktion übergeben (eager evaluation) z.B. Scheme, Clojure

Verzögerte/normale Auswertung

Auswertung der Parameter erst dann, wenn sie tatsächlich benötigt werden (lazy evaluation) z.B. Haskell

(11)

Syntax

Infix-Notation

(2 + 3) * square(3) z.B. Scala

Präfix-Notation

(* (+ 2 3) (square 3)) z.B. Lisp, Clojure

(12)

Typisierung

Dynamische Typisierung

Typ eines Werts wird zur Laufzeit bestimmt

Datenstrukturen können typischerweise Werte verschiedener Typen enthalten

(basiert auf klassischemλ-Kalkül)

z.B. Lisp, Clojure (jedoch: Clojure kompiliert zu Java) Statische/strikte Typisierung

Typinferenz zur Kompilierzeit

Definition von Funktionen für bestimmte Typen

Datenstrukturen haben typischerweise Werte desselben Typs (basiert aufλ-Kalkül mit Typen)

z.B. Haskell, F#, ML

(13)

Übersicht

Paradigmen von Programmiersprachen Arten funktionaler Sprachen

Eigenschaften funktionaler Programmierung Literatur et al.

(14)

Eigenschaften funktionaler Programmierung

1 Mächtige Konstrukte→ kompakter Code

2 Interaktive Entwicklung in der REPL

3 Modularisierung

4 Gute Wiederverwendbarkeit reiner Funktionen

5 Verifizierbarkeit

6 Gut geeignet für Nebenläufigkeit, inhärent thread-sicher

(15)

Übersicht

Paradigmen von Programmiersprachen Arten funktionaler Sprachen

Eigenschaften funktionaler Programmierung Literatur et al.

Literatur

Internet-Quellen

(16)

Literatur

Gerald Jay Sussman, Harold Abelson

Structure and Interpretation of Computer Programs MIT Press 1996.

http:

//mitpress.mit.edu/sicp/full-text/book/book.html Stuart Halloway, Aaron Bedra:

Programming Clojure, Second Edition Pragmatic Programmers, 2012.

Stefan Kamphausen, Tim Oliver Kaiser:

Clojure

dpunkt.verlag, 2010.

(17)

Literatur

Chas Emerick, Brian Carper, Christophe Grand Clojure Programming

O’Reilly 2012.

Dominikus Herzberg:

Funktionale Programmierung mit Clojure http://denkspuren.blogspot.de/2013/04/

freies-clojure-buch-funktionale.html

(18)

Internet-Quellen

Rich Hickey and the Clojure Community:

Clojure - home

http://clojure.org/

The Clojure Community:

Clojure - Google Groups

https://groups.google.com/forum/#!forum/clojure

The Clojure Community:

Clojure Documentation http://clojure-doc.org/

Hal Abelson, Gerald Jay Sussman:

Structure and Interpretation of Computer Programs Video Lectures (1986)

https://groups.csail.mit.edu/mac/classes/6.001/

abelson-sussman-lectures/

Referenzen

ÄHNLICHE DOKUMENTE

(b) Programmieren Sie eine Multimethode (area ...), die die Fläche eines Recht- ecks oder eines Kreises berechnet.. Flächenberechnung mit Records

(b) Schreiben Sie eine Funktion (add-account bank account), die dem Bestand der Konten der Bank ein weiteres Konto hinzufügt.. Beachten Sie die Eindeutigkeit

Manche dieser Regeln benötigen Unterbeweise als Voraussetzung(en). Unterbe- weise werden in einem Kasten dargestellt, wobei die obere Aussage eine Annahme und die untere Aussage die

Eine Annahme ist eine präskriptive Aussage über die Welt, die aber nicht durch das System erreicht werden soll, sondern für dieses vorausgesetzt werden kann. Eine Definition ist

Was ergeben die folgenden Ausdrücke in der Repl, eingegeben in der vorgegebenen Rei- henfolge.. Burkhardt Renz

Eine Bank bezahlt Zinsen gestaffelt nach dem Guthaben: 1% bis 1000€, 1,25% bis 2000€ und 1,5% über 2000€.. Schreiben Sie eine Funktion, die zu einem Guthaben g den Jahreszins

Programmieren Sie eine Funktion (gcd n m), die mit dem Euklidischen Algorithmus den größten gemeinsamen Teiler (greatest common divisor ) der natürlichen Zahlen n und m berechnet..

Schreiben Sie eine Funktion (freq coll), die wie frequencies eine Map der verschie- denen Elemente einer Kollektion mit der Zahl ihres Vorkommens ermittelt. Verwenden Sie