Programmierparadigmen
|
|
- Matilde Kalb
- vor 5 Jahren
- Abrufe
Transkript
1 Programmierparadigmen in Scheme D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2013, 17. Juni 2013, c D.Rösner D. Rösner PGP
2 Gliederung 1 Funktionales Programmieren: Scheme D. Rösner PGP
3 Historie Funktionales Programmieren: Scheme Frage: Welches sind die zwei ältesten und (in modernisierter Form) immer noch benutzten Programmiersprachen? Frage: Wann wurden diese Sprachen entwickelt?... D. Rösner PGP
4 Historie Funktionales Programmieren: Scheme unterschiedliche Ausrichtungen: Fortran: numerische Berechnungen Lisp: Symbolverarbeitung Symbolverarbeitung? Beispiele: symbolisches Rechnen (z.b. Differentiation, Integration) logisches Schliessen Analyse und Synthese chemischer Formeln Verarbeitung natürlicher Sprache Repräsentation von Wissen (z.b. semantische Netze)... D. Rösner PGP
5 Symbolverarbeitung mit Lisp Sprachmittel für Symbolverarbeitung in Lisp Atome als elementare Bausteine zusammengesetzte Strukturen auf der Basis verschachtelter Listen Beispiel: mögliche Darstellung eines Syntaxbaums (S (NP (DET Der) (N Mann)) (VP (V fragt) (PP (P nach) (NP (DET dem) (N Weg) (PP (P zum) (NP (N Bahnhof))))))) Scheme ist ein Dialekt von Lisp D. Rösner PGP
6 Scheme als funktionale Sprache: Diskussion von Scheme im Vergleich mit Haskell m.a.w. Gemeinsamkeiten und Unterschiede Haskell als Blaupause für funktionale Sprachen Grundlegendes: Interpreter Definition von Assoziationen zwischen Namen und Werten mit define (define <name> <wert>) D. Rösner PGP
7 Scheme als funktionale Sprache: wichtig: Funktionen sind Objekte erster Ordnung eine Interaktion: 1 ]=> (define pi ) ;Value: pi 1 ]=> pi ;Value: ]=> (define quadriere (lambda (zahl) (* zahl zahl))) ;Value: quadriere 1 ]=> (quadriere pi) ;Value: D. Rösner PGP
8 Scheme: Anonyme Funktionen Syntax: (lambda <parameterliste> <koerper>) überall dort verwendbar, wo auch mit Symbol auf Funktion verwiesen werden kann 1 ]=> ((lambda (n) (* n n)) 3) ;Value: 9 D. Rösner PGP
9 Scheme: Anonyme Funktionen alternative Syntax für benannte Funktionen (define (<name> <par-1>... <par-n>) <koerper>) statt (define <name> (lambda (<par-1>... <par-n>) <koerper>)) D. Rösner PGP
10 Scheme: Übersicht vordefinierte Datentypen Zahlen: ganze, rationale, Fliesskomma,... Strings: z.b. "ein String" Zeichen: z.b. #\a #\Z #\* #\space boolesche Werte: #t, #f... D. Rösner PGP
11 Scheme: Übersicht wichtigster aggregierter Datentyp: Liste Konstruktor: cons Selektoren: car, cdr Prädikate: list?, null? wichtige Kontrollstrukturen: if cond Funktionen zur Konversion zwischen verschiedenen Typen, z.b. number->string string->list... D. Rösner PGP
12 Syntax: in Scheme: Klammerung innerhalb geschachtelter Ausdrücke in Haskell: Vorrangregeln, Layoutregel Typisierung? in Scheme: keine Typisierung; in Haskell: strenge Typisierung Striktheit? Scheme: strikt Haskell: non-strikt rein funktional (pur)? Scheme: nicht pur, Seiteneffekte möglich z.b. mit set! Haskell: pur D. Rösner PGP
13 in Scheme: keine Typisierung Typüberprüfung durch vor- oder eigendefinierte Typprädikate Beispiele: number? list? string?... D. Rösner PGP
14 Striktheit vs. Non-Striktheit Eine (seiteneffekt-freie) Funktion heisst strikt, wenn gefordert wird, dass alle ihre Argumente definiert sind und so die Evaluationsordnung das Ergebnis nicht verändert. Eine Funktion heisst non-strikt, wenn für sie die Forderung nach Striktheit nicht erhoben wird. Eine Sprache heisst strikt, wenn gefordert wird, dass alle ihre Funktionen strikt. Eine Sprache heisst non-strikt, wenn sie die Definition non-strikter Funktionen zulässt. s.a. [Sco00], Ch D. Rösner PGP
15 Art der Auswertung? in Haskell: verzögerte Auswertung (lazy evaluation) für alle Argumente in Scheme: Auswertung für alle Argumente; aber: verzögerte Auswertung und call-by-need möglich mit delay und force s.a. [Sco00], Ch in Scheme nicht vordefiniert vorhanden sind u.a. Listenkomprehensionen und Fallunterscheidung durch Pattern Matching D. Rösner PGP
16 Scheme: weitere Aspekte Funktionen mit beliebiger Anzahl von Argumenten möglich (sog. Restparameter, der an Liste gebunden) Beispiel: (define (avg. nums) (average nums)) average erwartet Liste als Argument Definition: (define (average nums) (/ (apply + nums) (length nums))) D. Rösner PGP
17 Scheme: map... Anwenden einer Funktion auf die Elemente einer Liste und Rückgabe der Liste der Ergebnisse > (define (map f l) (if (null? l) () (cons (f (car l)) (map f (cdr l))))) > (map (lambda (x) (* x x)) ( )) ( ) D. Rösner PGP
18 Scheme: z.b. Falten einer zweistelligen Funktion in eine Liste: (define fold (lambda (f l i) (if (null? l) i ;; identity for f (f (car l) (fold f (cdr l) i))))) D. Rösner PGP
19 Scheme: partielle Anwendungen sind bei Funktionen im Curry-Format möglich (define curry (lambda (f) (lambda (a) (lambda (b) (f a b))))) 1 ]=> (((curry +) 3) 4) ;Value: 7 (define curried-plus (curry +)) D. Rösner PGP
20 : Sichtbarkeit von Definitionen die Definitionen auf dem Toplevel von Scheme sind global sichtbar wechselseitige Bezugnahme in rekursiven Definitionen ist möglich Beispiel: 1 ]=> (define (isodd n) (if (<= n 0) () (iseven (- n 1)))) ;Value: isodd... D. Rösner PGP
21 : Sichtbarkeit von Definitionen Beispiel cont.: 1 ]=> (define (iseven n) (if (< n 0) () (if (= n 0) #t (isodd (- n 1))))) ;Value: iseven 1 ]=> (iseven 5) ;Value: () 1 ]=> (isodd 5) ;Value: #t D. Rösner PGP
22 Lokale Definitionen Motivation: Vermeiden wiederholter Berechnungen klarer strukturierter Code Beispiel: eine Funktion addpairwise, die korrespondierende Elemente zweier Zahlenlisten addiert und falls eine Liste keine Elemente mehr hat den aktuellen Rest der anderen an die Liste der Paarsummen anhängt D. Rösner PGP
23 Scheme: lokale Bindungen mit let und let* Syntax: (let ((var1 val1) (var2 val2)... (varn valn)) <body>) Semantik: bei der Auswertung von <body> sind die in var1, var2,..., varn gebundenen Werte val1, val2,..., valn verfügbar D. Rösner PGP
24 Scheme: lokale Bindungen mit let und let* Beispiel: addpairwiserest als Äquivalent zu addpairwise (define (addpairwiserest list1 list2) (let ((front (addpairwise list1 list2)) (minlength (min (length list1)(length list2)))) (let ((rear (append (drop minlength list1) (drop minlength list2)))) (append front rear)))) D. Rösner PGP
25 Scheme: lokale Bindungen mit let und let* Beachte: bei let erfolgt die Auswertung und Bindung in den einzelnen (var1 val1) (var2 val2)... (varn valn) parallel daher folgendes falsch: (define (addpairwiserest list1 list2) (let ((front (addpairwise list1 list2)) (minlength (min (length list1)(length list2))) (rear (append (drop minlength list1) (drop minlength list2)))) (append front rear))) 1 ]=> (addpairwiserest ( ) (8 15)) ;Unbound variable: minlength D. Rösner PGP
26 Scheme: lokale Bindungen mit let und let* let* ist wie let, nur erfolgt Auswertung und Bindung in den einzelnen (var1 val1) (var2 val2)... (varn valn) sequentiell m.a.w. für die Ausdrücke vali (für 2 <= i <= n) stehen die Bindungen var1, var2,..., var(i-1) zur Verfügung D. Rösner PGP
27 Scheme: lokale Bindungen mit let und let* Beispiel für let*: (define (addpairwiserest list1 list2) (let* ((front (addpairwise list1 list2)) (minlength (min (length list1)(length list2))) (rear (append (drop minlength list1) (drop minlength list2)))) (append front rear))) 1 ]=> (addpairwiserest ( ) (8 15)) ;Value 12: ( ) D. Rösner PGP
28 Beispiel cont. Funktionales Programmieren: Scheme Hilfsfunktionen a la Haskell: (define (addpairwise list1 list2) (if (or (null? list1)(null? list2)) () (cons (+ (car list1)(car list2)) (addpairwise (cdr list1)(cdr list2))))) (define (take n list) (if (= n 0) () (cons (car list) (take (- n 1) (cdr list))))) (define (drop n list) (if (= n 0) list (drop (- n 1) (cdr list)))) D. Rösner PGP
29 Scheme: Berechnung Quadratwurzel mit Newton-Verfahren (define (sqrt x) (sqrt-iter 1 x)) (define (sqrt-iter guess x) (if (good-enough? guess x) guess (sqrt-iter (improve guess x) x))) (define (good-enough? guess x) (< (abs (- (square guess) x)).001)) (define (improve guess x) (average guess (/ x guess))) D. Rösner PGP
30 Blockstruktur: Funktionales Programmieren: Scheme (define (sqrt x) (define (good-enough? guess x) (< (abs (- (square guess) x)).001)) (define (improve guess x) (average guess (/ x guess))) (define (sqrt-iter guess x) (if (good-enough? guess x) guess (sqrt-iter (improve guess x) x))) (sqrt-iter 1 x) ) D. Rösner PGP
31 Interne Definitionen Ausnutzen, daß x in sqrt gebunden (lexikalischer ): (define (sqrt x) (define (good-enough? guess) (< (abs (- (square guess) x)).001)) (define (improve guess) (average guess (/ x guess))) (define (sqrt-iter guess) (if (good-enough? guess) guess (sqrt-iter (improve guess)))) (sqrt-iter 1)) D. Rösner PGP
32 lexikalischer : freie Variable in einer Prozedur verweisen auf Variable in umfassenden Prozeduren m.a.w.: Werte freier Variable werden in der Umgebung gesucht, in der die Prozedur definiert wurde D. Rösner PGP
33 Symbolisches Differenzieren zentrale Funktion: deriv (s.a. [AGJ96]) (define (deriv exp var) (cond ((constant? exp) 0) ((variable? exp) (if (same-variable? exp var) 1 0)) ((sum? exp) (make-sum (deriv (addend exp) var) (deriv (augend exp) var))) ((product? exp) (make-sum (make-product (multiplier exp) (deriv (multiplicand exp) var)) (make-product (deriv (multiplier exp) var) D. Rösner PGP
34 Symbolisches Differenzieren Darstellung von Summen (s.a. [AGJ96]) (define (make-sum a1 a2) (list + a1 a2)) (define (sum? x) (if (not (atom? x)) (eq? (car x) +) nil)) (define (addend s) (cadr s)) (define (augend s) (caddr s)) D. Rösner PGP
35 Symbolisches Differenzieren allgemein: Darstellung von Datenstrukturen Konstruktoren Prädikate Selektoren s.a. [AGJ96] D. Rösner PGP
36 Symbolisches Differenzieren Darstellung von Produkten (s.a. [AGJ96]) (define (make-product m1 m2) (list * m1 m2)) (define (product? x) (if (not (atom? x)) (eq? (car x) *) nil)) (define (multiplier p) (cadr p)) (define (multiplicand p) (caddr p)) D. Rösner PGP
37 Symbolisches Differenzieren Hilfsfunktionen (s.a. [AGJ96]) (define (constant? x) (number? x)) (define (variable? x) (symbol? x)) (define (same-variable? v1 v2) (and (variable? v1) (variable? v2) (eq? v1 v2))) D. Rösner PGP
38 Symbolisches Differenzieren Hilfsfunktionen (s.a. [AGJ96]) (define (atom? x) (or (number? x) (string? x) (symbol? x) (null? x) (eq? x #t))) D. Rösner PGP
39 Symbolisches Differenzieren Beispiele (s.a. [AGJ96]) Welcome to DrRacket, version [3m]. Language: R5RS [custom]; memory limit: 128 MB. > (deriv (+ x 3) x) (+ 1 0) > (deriv (* x y) y) (+ (* x 1) (* 0 y)) > (deriv (* (* x y) (+ x 3)) x) (+ (* (* x y) (+ 1 0)) (* (+ (* x 0) (* 1 y)) (+ x 3))) Welche Vereinfachungen von Termen? D. Rösner PGP
40 Symbolisches Differenzieren verbesserte Konstruktor-Funktionen (s.a. [AGJ96]) (define (make-sum a1 a2) (cond ((and (number? a1) (number? a2)) (+ a1 a2)) ((number? a1) (if (= a1 0) a2 (list + a1 a2))) ((number? a2) (if (= a2 0) a1 (list + a1 a2))) (else (list + a1 a2)))) D. Rösner PGP
41 Symbolisches Differenzieren Anwendung verbesserter Konstruktor-Funktion make-sum (s.a. [AGJ96]) > (deriv (+ x 3) x) 1 > (deriv (* (* x y) (+ x 3)) x) (+ (* (* x y) 1) (* (+ (* x 0) (* 1 y)) (+ x 3))) D. Rösner PGP
42 Symbolisches Differenzieren verbesserte Konstruktor-Funktionen (s.a. [AGJ96]) (define (make-product m1 m2) (cond ((and (number? m1) (number? m2)) (* m1 m2)) ((number? m1) (cond ((= m1 0) 0) ((= m1 1) m2) (else (list * m1 m2)))) ((number? m2) (cond ((= m2 0) 0) ((= m2 1) m1) (else (list * m1 m2)))) (else (list * m1 m2)))) D. Rösner PGP
43 Symbolisches Differenzieren Anwendung verbesserter Konstruktor-Funktion make-product (s.a. [AGJ96]) statt > (deriv (* (* x y) (+ x 3)) x) (+ (* (* x y) 1) (* (+ (* x 0) (* 1 y)) (+ x 3))) jetzt > (deriv (* (* x y) (+ x 3)) x) (+ (* x y) (* y (+ x 3))) D. Rösner PGP
44 Scheme: Programme haben die Form von Listen Scheme (und Lisp) sind homoikonisch, d.h. selbstrepräsentierend Programme können mit allen Listenfunktionen bearbeitet werden Beispiel: (define compose (lambda (f g) (lambda (x) (f (g x))))) 1 ]=> ((compose car cdr) (1 2 3)) ;Value: 2 D. Rösner PGP
45 Scheme: Beispiel cont.: (define compose2 (lambda (f g) (eval (list lambda (x) (list f (list g x))) (scheme-report-environment 5)))) 1 ]=> ((compose2 car cdr) (1 2 3)) ;Value: 2 D. Rösner PGP
46 Literatur: I Funktionales Programmieren: Scheme Harold Abelson, G.J.Sussman, and J.Sussman. Structure and Interpretation of Computer Programs. MIT Press, Cambridge, MA, USA, nd edition; Bem.: dt. Übersetzung existiert, aber engl. Original ist mehr zu empfehlen DR. Michael Lee Scott. Programming Language Pragmatics. Academic Press, San Diego, CA, USA, ISBN D. Rösner PGP
Programmierparadigmen
Programmierparadigmen D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2011, 20. Juni 2011, c 2011 D.Rösner D. Rösner PGP 2011...
MehrGliederung. Programmierparadigmen. Sprachmittel in SCHEME. Objekte: Motivation. Objekte in Scheme
Gliederung Programmierparadigmen D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Einführung Sprachmittel Sommer 2011, 20. Juni 2011,
MehrGliederung. Funktionale Programmierung. Pattern matching in Haskell. Pattern matching in ERLANG. Materialien zur Vorlesung
Gliederung Funktionale Programmierung Materialien zur Vorlesung D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Sommer 2011, 7.
MehrProgrammierparadigmen
in Haskell Programmierparadigmen in Haskell D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2011, 4. April 2011, c 2011 D.Rösner
Mehr17 Interpretation. Scheme-Programme als Datenstruktur. Interpretation von Ausdrücken. Interpretation von Lambda. Lambda als Datenstruktur
17 Interpretation Scheme-Programme als Datenstruktur Interpretation von Ausdrücken Interpretation von Lambda Lambda als Datenstruktur Toplevel Definitionen set! 17.1 Programme als Datenstruktur 17.1.1
MehrProgrammieren in COMMON LISP
Programmieren in COMMON LISP von Prof. Dr. Otto Mayer Universität Kaiserslautern Wissenschaftsverlag Mannheim/Wien/Zürich INHALTSVERZEICHNIS 0 EINLEITUNG 0.1 Entwicklung und Bedeutung von LISP 0.2 Ziele
MehrGliederung. Programmierparadigmen. Einführung in Prolog: Einführung in Prolog: Programmieren in Prolog. Einführung Syntax Regeln Listen Relationen
Gliederung Programmierparadigmen Programmieren in Prolog D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Sommer 2011, 26. April
MehrDie Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.
4.5.5 Rekursive Typen Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. datatype IntList = Nil Cons o f ( i n t IntList ) ; Damit
MehrProgrammierparadigmen
Programmierparadigmen D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2009, 22. Juni 2009, c 2009 D.Rösner D. Rösner PGP 2009...
MehrGliederung. Algorithmen und Datenstrukturen I. Listen in Haskell: Listen in Haskell: Listen in Haskell. Datentyp Liste Strings Listenkomprehension
Gliederung Algorithmen und Datenstrukturen I D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Winter 2009/10, 16. Oktober 2009, c
MehrLösung Probeklausur Informatik I
Lösung Probeklausur Informatik I 1 Lösung Aufgabe 1 (5 Punkte) Algorithmen und Programme Was ist der Unterschied zwischen einem Algorithmus und einem Programm? Ein Algorithmus ist eine Vorschrift zur Durchführung
MehrMethoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR.
Methoden zur Interpretation LISPähnlicher Programmiersprachen Seminarvortrag 20.01.2017 FACHBEREICH 9 TOBIAS STUMM MATR.-NR. 4012917 1 Inhalt Motivation Lisp > Definition > Scheme Interpreter > Definition
MehrInformatik I. 11. Prozeduren als Daten. 9. Dezember Albert-Ludwigs-Universität Freiburg. Informatik I. Jan-Georg Smaus. Prozeduren als Eingabe
11. Daten Albert-Ludwigs-Universität Freiburg 9. Dezember 2010 1 / 37 Daten? Prozeduren rechnen auf Daten, d.h., sie haben Daten als Einund Ausgabe. Was sind Daten? 2 / 37 Daten? Prozeduren rechnen auf
MehrWorkshop Einführung in die Sprache Haskell
Workshop Einführung in die Sprache Haskell Nils Rexin, Marcellus Siegburg und Alexander Bau Fakultät für Informatik, Mathematik und Naturwissenschaften Hochschule für Technik, Wirtschaft und Kultur Leipzig
MehrGliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung
Gliederung n Teil I: Einleitung und Grundbegriffe l 1. Organisatorisches l 2. Grundlagen von Programmiersprachen n Teil II: Imperative und objektorientierte Programmierung l 1. Grundelemente der Programmierung
MehrAlgorithmen und Datenstrukturen I
Algorithmen und Datenstrukturen I Einführung in Haskell (I) D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Winter 2009/10, 12. Oktober
MehrGrundlegende Datentypen
Funktionale Programmierung Grundlegende Datentypen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 14.11.2017 15:37 Inhaltsverzeichnis Typen........................................
MehrFunktionale Programmierung Grundlegende Datentypen
Grundlegende Datentypen Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 06.11.2017 16:45 Inhaltsverzeichnis Typen........................................
Mehr. Lisp. Moritz Heidkamp 25. April 2011
.. Lisp Moritz Heidkamp moritz@twoticketsplease.de 25. April 2011 1 / 36 . Greenspun s Tenth Rule Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden,
MehrBisher. Programme, Sequenzen von Formen. Ausdrücke und ihre Auswertung (Substitutionsmodell)
Bisher Programme, Sequenzen von Formen Ausdrücke und ihre Auswertung (Substitutionsmodell) Konstruktionsanleitung für Prozeduren Kurzbeschreibung Sorten und Verträge Gerüst Testfälle Rumpf ausfüllen Testen
MehrKonzepte von Programmiersprachen
Konzepte von Programmiersprachen Kapitel 3: Ausdrücke Phillip Heidegger Universität Freiburg, Deutschland SS 2009 Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 1 / 17 Inhalt Let
Mehr26 Hierarchisch strukturierte Daten
Algorithmik II Peter Wilke Sommersemester 2005 Teil III Funktionale Programmierung 26 Hierarchisch strukturierte Daten Peter Wilke Algorithmik II Sommersemester 2005 1 Peter Wilke Algorithmik II Sommersemester
MehrInterpreter - Gliederung
Institut für Informatik Ludwig-Maximilian Universität Interpreter - Gliederung Programmiersprache Syntax Konkrete Syntax Abstrakter Syntax Baum (Abstrakte Syntax) Parser Syntaktische Struktur einer Sprache
MehrGrundlegende Datentypen
Grundlegende Datentypen Funktionale Programmierung Prof. Dr. Oliver Braun Letzte Änderung: 22.10.2018 10:53 Grundlegende Datentypen 1/21 Typen in Haskell ist alles streng typisiert Haskell verfügt über
MehrHaskell for Hackers... or why functional programming matters
... or why functional programming matters Franz Pletz CCC München 27-06-2009 @ GPN8 Fahrplan Ablauf Motivation 1 Ablauf Motivation 2 3 4 Ablauf Ablauf Motivation bei Fragen/Unklarheiten:
MehrBisher. Programme. Ausdrücke und ihre Auswertung (Substitutionsmodell)
Bisher Programme Ausdrücke und ihre Auswertung (Substitutionsmodell) Konstruktionsanleitung für Prozeduren Kurzbeschreibung Sorten und Verträge Gerüst Testfälle Rumpf ausfüllen Testen 2.21 Erinnerung:
Mehr8 Prozeduren als Daten
8 Prozeduren als Daten Prozeduren als Parameter Prozeduren als Ergebnisse Prozeduren höherer Ordnung (higher-order procedures) Programmierung höherer Ordnung Verwendung als Abstraktionsmittel 8.1 Prozeduren
MehrGrundlegende Datentypen
Grundlegende Datentypen (Funktionale Programmierung) Prof. Dr. Oliver Braun Letzte Änderung: 18.03.2018 21:08 Grundlegende Datentypen 1/16 Typen in Haskell ist alles streng typisiert Haskell verfügt über
MehrLISP. Viele eklige Klammern. Entropia e.v. - CCC Karlsruhe
LISP Viele eklige Klammern LISP: Übersicht Was ist LISP? Programmiersprache mit vielen Klammern Listen orientierte Sprache (LISt Processor) Nicht rein funktional Viele Funktionen mit Nebeneffekten Später
MehrEinführung in die funktionale Programmierung
Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 26. Oktober 2006 Haskell - Einführung Syntax Typen Auswertung Programmierung
MehrRevised Report on the Algorithmic Language SCHEME
Revised Report on the Algorithmic Language SCHEME Entwickler Guy Lewis Steele Jr. Gerald J. Sussman 1975 MIT Spezifikationen IEEE Standard RnRS (R5RS) LISP Scheme Common Lisp Emacs Lisp Mac Lisp InterLisp
MehrWS 2012/2013. Robert Giegerich. 21. November 2012
WS 2012/2013 Robert AG Praktische Informatik 21. November 2012 Funktionen als Bürger erster Klasse Funktionen definieren kann man in jeder Programmiersprache. Eine funktionalen Programmiersprache erlaubt
MehrOutline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik
Outline 1 Einleitung 2 Einführung in C 3 Fortgeschrittenes in C 4 Einführung in Emacs Lisp 5 Einführung in Prolog 6 Formale Semantik Lisp 1958 von John McCarthy erfunden Funktionales Programmierparadigma
MehrAlgorithmen und Datenstrukturen II
Algorithmen und Datenstrukturen II in JAVA D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2009, 31. März 2009, c 2009 D.Rösner
MehrFallstudie: Nim Spiel
Fallstudie: Nim Spiel Angeblich chinesischen Ursprungs (Jianshizi) Interessant für Spieltheorie: vollständig analysierbar Frühzeitig computerisiert 1939 Nimatron (Weltausstellung New York) 1951 Nimrod
Mehr13 Abstrakte Datentypen
13 Abstrakte Datentypen Bisher: Konkrete Datentypen Menge von Elementen Operationen auf den Elementen (Konstruktoren, Selektoren, Typprädikate) Eigenschaften abgeleitet Jetzt: Abstrakte Datentypen (ADT)
Mehr6.1 Funktionale Programmierung 6.2 Programmierung mit Logik 6.3 Ereignisgesteuerte Programmierung
6.1 Funktionale Programmierung 6.2 Programmierung mit Logik 6.3 Ereignisgesteuerte Programmierung 6a - 1 6.1 Funktionale Programmierung Ein Algorithmus wird beschrieben als eine Funktion im mathematischen
MehrSWP Funktionale Programme (3. Teil)
SWP Funktionale Programme (3. Teil) Bernhard Aichernig Institut für Softwaretechnologie aichernig@ist.tugraz.at Institute for Software Technology Inhalt! Einfache Ausdrücke (Sprachen A +, B bin +, C Mult,
Mehr14 Zuweisungen und Zustand
14 Zuweisungen und Zustand Bisher: funktionale / wertorientierte Programmierung (let ((new-set (set-insert old-set new-element)))... new-set... old-set...) alte und neue Version sind gleichzeitig verfügbar
MehrEinführung in Haskell
Einführung in Haskell Axel Stronzik 21. April 2008 1 / 43 Inhaltsverzeichnis 1 Allgemeines 2 / 43 Inhaltsverzeichnis 1 Allgemeines 2 Funktions- und Typdefinitionen 2 / 43 Inhaltsverzeichnis 1 Allgemeines
MehrFunktionale Programmierung
FP-1.0 Funktionale Programmierung Prof. Dr. Uwe Kastens SS 2013 Vorlesung Funktionale Programmierung SS 2013 / Folie 100 Begrüßung Functional Programming is Fun FP-1.1 Fun ctional Programming is Fun ctional
MehrGliederung. Programmierparadigmen. Mathematische Funktionen: Mathematische Funktionen: Lambda-Kalkül
Gliederung Programmierparadigmen D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2013, 9. Juli 2013, c 2009 13 D.Rösner 1 Einführung
MehrWS 2013/2014. Robert Giegerich. 11. Dezember 2013
WS 2013/2014 Robert AG Praktische Informatik 11. Dezember 2013 höherer Ordnung Worum geht es heute? In Haskell gibt es, die als Argument haben oder als Ergebnis liefern. Diese nennt man höherer Ordnung.
MehrListen und Listenfunktionen. Grundlagen der Programmierung 2 A (Listen) Listen und Listenfunktionen. Listen? Haskell: Listen
Listen und Listenfunktionen Grundlagen der Programmierung 2 A (Listen) Haskell: Listen Prof. Dr. Manfred Schmidt-Schauß Listen modellieren Folgen von gleichartigen, gleichgetypten Objekten. Ausdruck im
MehrBerechnungsschemata: Funktion als Parameter abstrahiert Operation im Schema, wird bei Aufruf des Schemas konkretisiert
6. Funktionen als Daten, Übersicht Orthogonales Typsystem: Funktionen sind beliebig mit anderen Typen kombinierbar Notation für Funktionswerte (Lambda-Ausdruck): fn (z,k) => z*k Datenstrukturen mit Funktionen
Mehr16 Interpretation. Scheme-Programme als Datenstruktur. Interpretation von Ausdrücken. Interpretation von Lambda. Lambda als Datenstruktur
16 Interpretation Scheme-Programme als Datenstruktur Interpretation von Ausdrücken Interpretation von Lambda Lambda als Datenstruktur Toplevel Definitionen 16.1 Programme als Datenstruktur 16.1.1 Mini-Scheme
MehrObjektorientierte Programmierung mit C++ (WS 2016/2017)
Institut für Numerische Mathematik Dr. Andreas F. Borchert und Dr. Michael C. Lehn 26. Januar 2017 Blatt 12 Objektorientierte Programmierung mit C++ (WS 2016/2017) Abgabe bis zum 2. Februar 2017, 16:00
MehrParadigmen der Programmierung
SS 11 Prüfungsklausur 25.07.2011 Aufgabe 5 (6+9 = 15 Punkte) a) Bestimmen Sie jeweils den Typ der folgenden Haskell-Ausdrücke: ( 1, 2 :"3", 4 < 5) :: (Char, String, Bool) [(last, tail), (head, take 5)]
MehrMultiparadigmen- Programmiersprachen
Multiparadigmen- Programmiersprachen Martin Grabmüller magr@cs.tu-berlin.de Fachgebiet Übersetzerbau und Programmiersprachen Fakultät IV Elektrotechnik und Informatik Technische Universität Berlin Multiparadigmen-Programmiersprachen
MehrAlgorithmen und Datenstrukturen II
Algorithmen und Datenstrukturen II D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2009, 26. März 2009, c 2009 D.Rösner D.
MehrAufgabe: Platz-effiziente Kompression von Textdaten
7.3 Huffman-Bäume Anwendung von Binärbäumen Aufgabe: Platz-effiziente Kompression von Textdaten Standardcodierungen von Textdaten ISO-8859-1: 8 Bit pro Zeichen UTF-16: 16 Bit pro Zeichen Codierungen mit
MehrWS 2013/2014. Robert Giegerich. 11. Dezember 2013
WS 2013/2014 Robert AG Praktische Informatik 11. Dezember 2013 höherer Ordnung Worum geht es heute? In Haskell gibt es, die als Argument haben oder als Ergebnis liefern. Diese nennt man höherer Ordnung.
MehrEinführung in die Programmiertechnik
Einführung in die Programmiertechnik Funktionale Programmierung: LISP Grundlagen funktionaler Programmierung Idee: Zu lösendes Problem wird als mathematische Funktion formuliert Beispiel Rechtschreibprüfung:
MehrWas ist Abstraktion? PROZEDURALE ABSTRAKTION. Abstraktor
PROZEDURALE ABSTRAKTION Top-Down-Entwicklung von Prozeduren Ziel: Verstehen der Prozedurdefinition als Abstraktion Wenn wir Prozeduren im rein funktionalen Sinn betrachten, also als mathematische Abbildungen,
MehrGrundlagen der Programmierung 2 A (Listen)
Grundlagen der Programmierung 2 A (Listen) Haskell: Listen Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Listen und Listenfunktionen Listen modellieren Folgen von gleichartigen, gleichgetypten Objekten.
MehrGrundlagen der Programmierung 2 (2.A)
Grundlagen der Programmierung 2 (2.A) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 5. Mai 2011 Listen und Listenfunktionen Listen modellieren Folgen von gleichartigen,
MehrGuile Die Erweiterungssprache des GNU-Projekts
Guile Die Erweiterungssprache des GNU-Projekts Matthias Köppe Otto-von-Guericke-Universität Magdeburg Magdeburger Linux User Group e. V. 19. Mai 2001 Überblick Guile als Erweiterungssprache Guile als Scheme-Implementierung
MehrProgrammieren in Haskell
beschreibungen Universität Bielefeld AG Praktische Informatik October 21, 2014 der funktionalen Programmierung gibt es allen Programmiersprachen, aber der funktionalen Programmierung werden sie besonders
MehrGliederung. Algorithmen und Datenstrukturen I. Eine wichtige Frage. Algorithmus. Materialien zur Vorlesung. Begriffsbestimmung EUKLID Primzahltest
Gliederung Algorithmen und Datenstrukturen I Materialien zur Vorlesung D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Winter 2009/10,
MehrÜbergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1
Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten
MehrGrundlagen der Programmierung 2. Operationale Semantik
Grundlagen der Programmierung 2 Operationale Semantik Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 29. April 2009 Semantik von Programmiersprachen Semantik = Bedeutung
MehrFallstudie: Nim Spiel
Fallstudie: Nim Spiel Angeblich chinesischen Ursprungs (Jianshizi) Interessant für Spieltheorie: vollständig analysierbar Frühzeitig computerisiert 1939 Nimatron (Weltausstellung New York) 1951 Nimrod
MehrInterpreter (Hilfsfunktionen)
Interpreter (Hilfsfunktionen) -- Berechnet die Liste der gebundenen Variablen boundlist :: Expr -> [String] boundlist (Var x) = [] boundlist (Lambda x e) = x : (boundlist e) boundlist (App e1 e2) = (boundlist
MehrGliederung. Algorithmen und Datenstrukturen II. Problem: Längste gemeinsame Teilsequenz. Problem: Längste gemeinsame Teilsequenz
Gliederung Algorithmen und Datenstrukturen II Algorithmen zur Textverarbeitung II D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg
MehrC.3 Funktionen und Prozeduren
C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens
MehrSWP Funktionale Programme (2. Teil)
SWP Funktionale Programme (2. Teil) Bernhard Aichernig Institut für Softwaretechnologie aichernig@ist.tugraz.at Institute for Software Technology Inhalt Einfache Ausdrücke (Sprachen A +, B bin +, C Mult,
Mehr10 Abstrakte Datentypen
10 Abstrakte Datentypen abstrakte Datentypen generische Implementierung datengesteuerte Programmierung Operationstabelle 10.1 Abstrakte Datentypen Bisher: Konkrete Datentypen Menge von Elementen Operationen
Mehr13 Berechenbarkeit und Aufwandsabschätzung
13 Berechenbarkeit und Aufwandsabschätzung 13.1 Berechenbarkeit Frage: Gibt es für jede Funktion, die mathematisch spezifiziert werden kann, ein Programm, das diese Funktion berechnet? Antwort: Nein! [Turing
MehrLISP-Intensivkurs. Zweiter Tag Vormittag. Übersicht:
LISP-Intensivkurs Zweiter Tag Vormittag Übersicht: Funktionen als Werte Funktionen höherer Ordnung Map-Funktionen Anonyme Funktionen Parameterlisten: Optionale Parameter Schlüsselwort-Argumente LISP-Intensivkurs
MehrGrundlagen der Programmierung 2 (1.A)
Grundlagen der Programmierung 2 (1.A) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 18. April 2007 Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte
Mehr1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik
Mehr1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik
Mehr1 Erste Schritte in Scheme
1 Erste Schritte in Scheme Die Programmiersprache Scheme geboren 1975 Eltern: Gerald Jay Sussman and Guy Lewis Steele Jr. Ort: Massachusetts Institute of Technology aktuelle Beschreibung: R6RS (September
MehrVortrag. Vortrag im Rahmen der Master-Vorlesung Semantik von Programmiersprachen an der FH München, Fachbereich Informatik
Vortrag β- and η-conversion Vortrag im Rahmen der Master-Vorlesung Semantik von Programmiersprachen an der FH München, Fachbereich Informatik von Stefan Hertel (sh_ccbiker@gmx.de Thomas Wöllert (thomas@woellert.net
MehrFunktionale Programmierung. Das Funktionale Quiz. Das Funktionale Quiz. Das Funktionale Quiz
Funktionale Programmierung Das Funktionale Quiz 31.5.2005 Nenne eine Gemeinsamkeit zwischen Typklassen und OO-Klassen Das Funktionale Quiz Das Funktionale Quiz Nenne einen Unterschied zwischen Typklassen
MehrC++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22
C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven
MehrIII.1 Prinzipien der funktionalen Programmierung - 1 -
1. Prinzipien der funktionalen Programmierung 2. Deklarationen 3. Ausdrücke 4. Muster (Patterns) 5. Typen und Datenstrukturen 6. Funktionale Programmiertechniken III.1 Prinzipien der funktionalen Programmierung
MehrFunktionen höherer Ordnung. 3. Dezember 2014
höherer Ordnung Universität Bielefeld AG Praktische Informatik 3. Dezember 2014 höherer Ordnung Worum geht es heute? In Haskell gibt es, die als Argument haben oder als Ergebnis liefern. Diese nennt man
MehrProgrammiersprachen: Klassifizierung und Methoden. Programmier-Paradigmen. Grundlagen der Programmierung 2 (1.C) - 1 -
Programmiersprachen: Klassifizierung und Methoden Programmier-Paradigmen Grundlagen der Programmierung 2 (1.C) - 1 - Programmiersprachen: Begriffe Syntax Beschreibung der Programme als Texte let xyz =
MehrProf. Dr. Ulrich Hoffmann, Prof. Dr. Uwe Schmidt
Informatik Seminar WS 2009/2010 Prof. Dr. Ulrich Hoffmann, Prof. Dr. Uwe Schmidt Lisp in der JVM Michael Krüger (inf6065) 1 Übersicht 1. Hintergrund 2. Designziele 3. Spracheigenschaften 4. Klassenanalyse
MehrÜbungen zu Softwareentwicklung III, Funktionale Programmierung
Übungen zu Softwareentwicklung III, Funktionale Programmierung Blatt 10, Woche 12 Funktionen höherer Ordnung und kombinatorische Probleme Leonie Dreschler-Fischer WS 2014/2015 Ausgabe: Freitag, 9.2015,
MehrEinführung in die Funktionale Programmierung
Einführung in die Funktionale Programmierung Am Beispiel von OCaml Michael Dienert 12. Oktober 2018 Inhaltsverzeichnis 1 Welche funktionale Sprache wählen wir? 2 1.1 Welche funktionale Sprache soll ich
MehrInformatik I. Informatik I. 5.1 Listen. 5.2 Rekursion auf Listen. 5.3 Polymorphismus. 5.4 Eingebaute Listen. 5.1 Listen. Listen
Informatik I 4. November 2010 5. und Rekursion Informatik I 5. und Rekursion Jan-Georg Smaus Albert-Ludwigs-Universität Freiburg 4. November 2010 5.1 5.2 Rekursion auf 5.3 Polymorphismus 5.4 Eingebaute
MehrProgrammiersprachen. Organisation und Einführung. Berthold Hoffmann. Studiengang Informatik Universität Bremen
Organisation und Einführung Studiengang Informatik Universität Bremen Sommersemester 2010 (Vorlesung am Montag, der 12. April 2010) (Montag, der 12. April 2008) 1 Vorstellung 2 Organisation 3 Einführung
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel
Mehr15 Zuweisungen und Zustand
15 Zuweisungen und Zustand Bisher: funktionale / wertorientierte Programmierung (let ((new-set (set-insert old-set new-element)))... new-set... old-set...) alte und neue Version sind gleichzeitig verfügbar
MehrPraktische Informatik 3
Praktische Informatik 3 Christian Maeder WS 03/04 Vorlesung vom 12.1.2004: Ein/Ausgabe in funktionalen Sprachen Vorlesung vom 12.1.2004: Ein/Ausgabe in funktionalen Sprachen 3 Inhalt Wo ist das Problem?
MehrAlgorithmen und Datenstrukturen II
Algorithmen und Datenstrukturen II Algorithmen zur Textverarbeitung III: D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2009,
MehrVL06: Haskell (Funktionen höherer Ordnung, Currying)
VL06: Haskell (Funktionen höherer Ordnung, Currying) IFM 5.3 Spezielle Methoden der Programmierung Carsten Gips, FH Bielefeld 18.05.2015 Wiederholung Wiederholung Wie können Sie die ersten n Elemente einer
MehrBeschreibung von Werten: Beschreibung von Werten: (2) Begriffsklärung: (Ausdruck, expression) (2) Begriffsklärung: (Ausdruck, expression)
Beschreibung von Werten: Beschreibung von Werten: (2) mittels Konstanten oder Bezeichnern für Werte: 23 " Ich bin eine Zeichenreihe" True x durch direkte Anwendung von Funktionen: abs (-28382) "Urin" ++
MehrGrundlagen der Programmierung 2 (1.C)
Grundlagen der Programmierung 2 (1.C) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 8. Mai 2007 Listen und Listenfunktionen Listen modellieren Folgen von gleichartigen,
MehrBeispiele: Funktionsabstraktion (3) Funktionsdeklaration. Funktionsdeklaration (2) Funktionsdeklaration (3) 3. Abstraktion über Funktionsbezeichner:
Beispiele: Funktionsabstraktion (3) Funktionsdeklaration 3. Abstraktion über Funktionsbezeichner: Ausdruck: f (f x) Abstraktion: \ f x -> f (f x) Mit Bezeichnervereinbarung: twice = \ f x -> f (f x) erg
MehrFunktionale Programmierung
Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 2 Teil II Typen mit Werten und Ausdruck, sogar listenweise 3 Haskell Programme Programm Module ein
MehrSWP Funktionale Programme
SWP Funktionale Programme Berhard Aichernig und Alexander Felfernig Institut für Softwaretechnologie {bernhard.aichernig,alexander.felfernig}@ist.tugraz.at Institute for Software Technology Inhalt Einfache
Mehr