Funktionale Programmierung (in Clojure)

Ähnliche Dokumente
Modellierung und Programmierung 1

Programmieren in Haskell Einführung

Grundzüge der Programmierung. Konzepte der objektorientierten Programmierung (oop) OBJEKTE - KLASSEN

Objektorientierte Programmierung OOP

Gliederung. Programmierparadigmen. Sprachmittel in SCHEME. Objekte: Motivation. Objekte in Scheme

Programmierparadigmen

Objektorientiertes JavaScript

Programmieren Lernen mit BYOB. Gerald Futschek 5. November 2012

Objektorientierte Programmierung

Einführung in die Informatik

Informatik Java-Programmierkurs im Rahmen der Berufs- u. Studienorientierung für Schüler. Joliot-Curie-Gymnasium GR 2010 Nico Steinbach

Grundlagen von Python

Prof. Dr.-Ing. Rainer Schmidt 1

3. LINEARE GLEICHUNGSSYSTEME

Scala kann auch faul sein

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

Programmierparadigmen. Programmierparadigmen. Imperatives vs. objektorientiertes Programmieren. Programmierparadigmen. Agenda für heute, 4.

Modulhandbuch für das BA Kombinationsfach Angewandte Informatik Multimedia

Softwareanforderungsanalyse

Professionelle Seminare im Bereich MS-Office

GI-Technologien zur Umsetzung der EU-Wasserrahmenrichtlinie (WRRL): Wissensbasen. Teil 1: Einführung: Wissensbasis und Ontologie.

III.1 Prinzipien der funktionalen Programmierung - 1 -

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Sudoku-Informatik oder wie man als Informatiker Logikrätsel löst

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Grundbegriffe der Informatik

1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Einführung in PHP. (mit Aufgaben)

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Korrelation (II) Korrelation und Kausalität

Algorithmen und Programmieren II Einführung in Python

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Prof. Dr. Ulrich Hoffmann, Prof. Dr. Uwe Schmidt

Übungsaufgaben Tilgungsrechnung

JetSym. Programmierung in Hochsprache ST nach IEC We automate your success.

Fragen. f [ ] = [ ] f (x : y : ys) = x y : f ys f (x : xs) = f (x : x : xs) Wozu evaluiert f [1, 2, 3] (Abkürzung für f (1 : 2 : 3 : [ ]))?

ANSPRECHPARTNER. Film Mathematik statt Rechnen (Quelle: Hochschule Merseburg) Prof. Dr. Axel Kilian Fachbereich Informatik und Kommunikationssysteme

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Übungsbuch für den Grundkurs mit Tipps und Lösungen: Analysis

Theoretische Grundlagen des Software Engineering

Schulinternes Curriculum für Informatik (Q2) Stand April 2015

Lineare Gleichungssysteme

Grammatiken. Einführung

Vorkurs C++ Programmierung

Informatik für Ingenieure

1. Grundkonzepte der logischen Programmierung 2. Syntax von Prolog 3. Rechnen in Prolog. IV.1 Grundkonzepte der logischen Programmierung - 1 -

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Terme stehen für Namen von Objekten des Diskursbereichs (Subjekte, Objekte des natürlichsprachlichen Satzes)

Erwin Grüner

Programmierkurs Python I

3. Stored Procedures und PL/SQL

Informationsblatt Induktionsbeweis

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

LIFO Kurzinformation zur Methode

Veröffentlichen von Apps, Arbeitsblättern und Storys. Qlik Sense Copyright QlikTech International AB. Alle Rechte vorbehalten.

Was ist Logische Programmierung?

Professionelle Seminare im Bereich MS-Office

Mathematische Grundlagen

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Umzug der abfallwirtschaftlichen Nummern /Kündigung

Lehrer: Einschreibemethoden

Stand 15. Oktober Fragen und Antworten

1 Mathematische Grundlagen

Klassenarbeit zu linearen Gleichungssystemen

PHP Kurs Online Kurs Analysten Programmierer Web PHP

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

Code wiederverwenden: Objektorientierte Programmierung (OOP) sinnvoll nutzen Roland Wagner Automatisierungstreff IT & Automation 2015

Einführung in die Informatik II

Dazu stellen Sie den Cursor in die Zeile, aus der eine Überschrift werden soll, und klicken auf die gewünschte Überschrift.

Programmieren einer Lüftungsanlage mit DDC-Suite Vorlagen Arbeiten mit dem Fupla

Lehrer-Umfrage "LRS / Legasthenie" im deutschsprachigen Raum LegaKids 2010

Version 0.3. Installation von MinGW und Eclipse CDT

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2

Funktionale Programmierung

Mächtigkeit von WHILE-Programmen

Objektorientierung: Klassen und Objekte

FRAGEBOGEN ANWENDUNG DES ECOPROWINE SELBSTBEWERTUNG-TOOLS

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Sie suchen Verstärkung für Ihre Praxis?

Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom : Rekursive Datentypen

Computeranwendung und Programmierung (CuP)

Java Webentwicklung (mit JSP)

Mediator 9 - Lernprogramm

Beschreibung der Umstellungsschritte für moneyplex (neue Benutzerkennung und Kommunikationsadresse)

2 Aufbau der Arbeit und wissenschaftliche Problemstellung

The B Method. B ist eine Methode zur Spezifikation zum Entwurf zur Implementierung von Software Systemen. Bücher zur B-Methode

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

RUP Analyse und Design: Überblick

Programmieren 3. Programmieren in C und Python. Prof. Dr. Peter Barth. Hochschule RheinMain. Fachbereich Design Informatik Medien.

Angebot. UVV-Prüfungen und Wartungen von mobilen Abfallpressen

Stellvertretenden Genehmiger verwalten. Tipps & Tricks

Lösungsvorschlag für Übungsblatt 6 Software Engineering 1 (WS 2012/13)

Jürgen Schwab, debis Systemhaus

Transkript:

Funktionale Programmierung (in Clojure) Einführung Burkhardt Renz Fachbereich MNI Technische Hochschule Mittelhessen Wintersemester 2014/15

Ü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.

Paradigmen von Programmiersprachen Paradigma kommt 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?

Wichtigste Paradigmen imperative Programmierung funktionale Programmierung logische, bzw. relationale Programmierung objektorientierte Programmierung

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

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,...

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

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

Übersicht Paradigmen von Programmiersprachen Arten funktionaler Sprachen Auswertungsart Syntax Typisierung Eigenschaften funktionaler Programmierung Literatur et al.

Auswertungsart Strikte/applikative Auswertung Erst werden die Parameter evaluiert und dann 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

Syntax Infix-Notation (2 + 3) * square(3) z.b. Scala Präfix-Notation (* (+ 2 3) (square 3)) z.b. Lisp, Clojure

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

Übersicht Paradigmen von Programmiersprachen Arten funktionaler Sprachen Eigenschaften funktionaler Programmierung Literatur et al.

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

Übersicht Paradigmen von Programmiersprachen Arten funktionaler Sprachen Eigenschaften funktionaler Programmierung Literatur et al. Literatur Internet-Quellen

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.

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

Rich Hickey and the Clojure Community: Clojure - home http://clojure.org/ Internet-Quellen 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/