Vortrag. Vortrag im Rahmen der Master-Vorlesung Semantik von Programmiersprachen an der FH München, Fachbereich Informatik

Größe: px
Ab Seite anzeigen:

Download "Vortrag. Vortrag im Rahmen der Master-Vorlesung Semantik von Programmiersprachen an der FH München, Fachbereich Informatik"

Transkript

1 Vortrag β- and η-conversion Vortrag im Rahmen der Master-Vorlesung Semantik von Programmiersprachen an der FH München, Fachbereich Informatik von Stefan Hertel Thomas Wöllert

2 Inhalt Einführung - Reduktion von Prozeduren β-konversion Grammatik des Lambda-Kalküls (Wiederholung Transformationsregel und Probleme Formalisierung der Substitution β-konversion, -Redex und -Reduktion Implementierung (beta-redex? [...] Implementierung (substitute [...] Implementierung (beta-reduce [...] η-konversion η-konversion, -Redex und -Reduktion Implementierung (eta-redex? [...] Implementierung (eta-reduce [...] Implementierung (eta-expand [...]

3 Inhalt Einführung Einführung - Reduktion von Prozeduren β-konversion Grammatik des Lambda-Kalküls (Wiederholung Transformationsregel und Probleme Formalisierung der Substitution β-konversion, -Redex und -Reduktion Implementierung (beta-redex? [...] Implementierung (substitute [...] Implementierung (beta-reduce [...] η-konversion η-konversion, -Redex und -Reduktion Implementierung (eta-redex? [...] Implementierung (eta-reduce [...] Implementierung (eta-expand [...]

4 Reduktion von Prozeduren I Problemstellung Auswertung eines Prozeduraufrufs. (def foo (lambda (x y (+ (* x 3 y ; (foo ( ; A-priori Kenntnis Tritt im body der Prozedur eine Referenz auf einen ihrer formalen Parameter auf (x oder y, kann das passende Argument des Aufrufs anstatt dieses Parameters erscheinen. (foo ( ; (+ (* ( ; 22; Regel (informell Um das Resultat eines Prozeduraufrufs zu erhalten, müssen die formalen Parameter im body der Prozedur durch ihre passenden Argumente (vom Aufruf der Prozedur ersetzt werden. (ABER: Einschränkungen dieser Regel notwendig! Siehe 4.3.1

5 Reduktion von Prozeduren II Schrittweise Ausführung der Ersetzung (Variante 1 In jedem Schritt wird ein Unterausdruck durch einen äquivalenten Unterausdruck ersetzt. (def foo (lambda (x y (+ (* x 3 y ; (foo ( ; => ((lambda (x y (+ (* x 3 y ( ; => (+ (* ( ; => 22;

6 Reduktion von Prozeduren III Schrittweise Ausführung der Ersetzung (Variante 2 Alternativ können auch die Argumente des Aufrufs zuerst ausgewertet werden. Erst danach werden die Ersetzungen vorgenommen. (def foo (lambda (x y (+ (* x 3 y ; (foo ( ; => (foo 5 7; => (+ (* 5 3 7; => (+ 15 7; => 22;

7 Reduktion von Prozeduren IV Schrittweise Ausführung der Ersetzung (Variante 3 Ebenso ist es möglich, die aufgerufenen Prozeduren schrittweise zu ersetzen. (def c+ (lambda (n (lambda (m (+ n m ; ((c+ 5 3; => ((lambda (m (+ 5 m 3; => (+ 5 3; => 8;

8 Reduktion von Prozeduren V Sugaring Rules transformieren Einige Spezialformen (z.b. let stellen nur syntaktischen Zucker anderer Formen dar. Solche Zucker Regeln können daher ebenso durch Transformationen ausgedrückt werden. (let ((var 1 exp 1... (var n exp n body ((lambda (var 1... var n body exp 1... exp n Anwendung mit Ersetzungen Diese Regeln können zusammen mit den (bereits vorgestellten Ersetzungen angewendet werden, um komplexe Ausdrücke auszuwerten. (let ((x 3 (add5 (c+ 5 (add5 x; => (let ((x 3 (add5 (lambda (m (+ 5 m (add5 x; => ((lambda (x add5 (add5 x 3 (lambda (m (+ 5 m; => ((lambda (m (+ 5 m 3; => (+ 5 3; => 8;

9 Reduktion von Prozeduren VI Literal representation of a value In den vorherigen Beispielen wurde mit der literarischen Repräsentation der Werte gearbeitet. Es ist nicht möglich, die Werte selbst in den Ausdrücken zu verwenden. Bisher wurden nur numerische Literale benutzt, daher ist es schwierig den Unterschied zu erkennen. Der Unterschied wird klar, wenn die Werte Listen enthalten. In diesem Beispiel ist die literarische Repräsentation der Liste mit quote markiert. (let ((second (lambda (x (car (cdr x (second (list 1 2 3; => ((lambda (second (second (list (lambda (x (car (cdr x; => ((lambda (x (car (cdr x (list 1 2 3; => ((lambda (x (car (cdr x '(1 2 3; => (car (cdr '(1 2 3; => (car '(2 3; => 2; Wäre in diesem Beispiel die Liste (1 2 3 benutzt worden: (car (cdr (1 2 3, hätte eine Application der Zahl 1 und weiterer Argumente vorgelegen.

10 Inhalt β-konversion Einführung - Reduktion von Prozeduren β-konversion Grammatik des Lambda-Kalküls (Wiederholung Transformationsregel und Probleme Formalisierung der Substitution β-konversion, -Redex und -Reduktion Implementierung (beta-redex? [...] Implementierung (substitute [...] Implementierung (beta-reduce [...] η-konversion η-konversion, -Redex und -Reduktion Implementierung (eta-redex? [...] Implementierung (eta-reduce [...] Implementierung (eta-expand [...]

11 Grammatik des Lambda-Kalkül Untersuchung im Kontext des Lambda-Kalkül Zur genaueren Untersuchung der vorgestellten Transformationen benutzen wir als Kontext die Sprache des Lambda-Kalkül. <exp> ::= <varref> (lambda (<var> <exp> (<exp> <exp> Erweiterung der Grammatik Da in vielen Fällen Konstanten zum Lambda-Kalkül hinzugefügt werden, erweitern wir die Grammatik um Zahlen. Dies beeinträchtigt in keiner Weise die theoretischen Eigenschaften des Lambda-Kalkül. <exp> ::= <number> Aufrufe in diesem Kontext In dieser Grammatik wird die Transformation auf Prozeduraufrufe folgender Form angewendet... ((lambda (var exp rand

12 Transformationsregel und Probleme ((lambda (var exp rand Idee Die Idee ist, dass der Ausdruck exp äquivalent zu einem neuen Ausdruck ist, der entsteht, wenn man in exp die Referenzen von var durch rand ersetzt. exp[rand/var] Problem Bei der Umbenennung von Variablen muss darauf geachtet werden, Konflikte zu vermeiden. Variablen gleichen Namens können unterschiedlich sein. In solch einem Fall können freie Variablen in rand durch Bindungen von var in einem Lambda- Ausdruck in exp eingefangen werden. ((lambda (x (lambda (y (x y (y w ; => (lambda (y ((y w y; Die obige Transformation nach der vorgestellten Idee produziert ein falsches Ergebnis. Die Referenz y in (y w muss frei bleiben. Die Lösung besteht darin, den Namen der inneren Variablen y zu ändern (z.b. z. Dieser neue Name darf in (y w nicht frei sein.

13 Formalisierung der Substitution I Ersetzungsregeln Wie im vorherigen Beispiel gesehen müssen die Ersetzungsregeln formal festgelegt werden, um fehlerfrei zu arbeiten. E[M/x] 1.Regel Wenn E die Variable x ist, ergibt sich als Resultat der Ausdruck M. x[m/x] = M 2.Regel Wenn E eine andere Variable y oder Konstante c ist, ergibt sich als Resultat diese Variable oder Konstante. y[m/x] = y (mit y!= x c[m/x] = c 3.Regel Wenn E eine Application der Form (F G ist, wird die Ersetzung an F und G vorgenommen. (F G[M/x] = (F[M/x] G[M/x]

14 Formalisierung der Substitution II Besondere Beachtung verlangt die Ersetzung, wenn E die Form (lambda (y E' besitzt. 4.Regel Wenn gilt y = x (die Variable, die wir ersetzen, wird die Ersetzung abgebrochen, da in (lambda (x E' die Variable x nicht frei ist. (lambda (x E'[M/x] = (lambda (x E' 5.Regel Die Ersetzung wird ebenfalls beendet wenn x in E' nicht frei ist. (lambda (y E'[M/x] = (lambda (y E' 6.Regel Wenn gilt y!= x und y nicht frei in M ist, kann die Ersetzung in E' vorgenommen werden. (lambda (y E'[M/x] = (lambda (y E'[M/x] 7.Regel Wenn y!= x, x in E' frei und y in M frei ist, kann versehentliches Einfangen auftreten. Die Lösung ist y umzubenennen (α-konversion. Der neue Name darf in E' und M nicht frei sein. (lambda (y E'[M/x] = (lambda (z (E'[z/y][M/x]

15 β-konversion, -Redex und -Reduktion I Definition - β-konversion Die Konversion wird durch Anwendung der unten beschriebenen Regel durchgeführt. Dabei müssen die zuvor aufgestellten Ersetzungsregeln beachtet werden. ((lambda (x E M = E[M/x] Definition - β-redex Ein Ausdruck, auf den die β-konversion angewendet werden kann, heisst β-redex. ((lambda (x E M Definition - β-reduktion Wird die β-konversion von links-nach-rechts angewendet, um ein β-redex zu transformieren, wird von der β-reduktion gesprochen. Eine Anwendung von rechts-nach-links ist ebenfalls möglich, z.b. wenn let in ein Programm eingebracht wird, um Wiederholungen eines Ausdrucks zu vermeiden. ((f (a (b c (a (b c; => ((lambda (x ((f x x (a (b c; => (let ((x (a (b c ((f x x;

16 β-konversion, -Redex und -Reduktion II Beispiele Auf die folgenden Ausdrücke wurde die β-reduktion angewendet. (Aufgabe ((lambda (x E M = E[M/x] ((lambda (x (x (y x z; => (x (y x[z/x] => (z (y z; (1., 2., 3. Regel ((lambda (x (x y (lambda (y (x y; => (x y[(lambda (y (x y/x] => ((lambda (y (x y y; (1., 2., 3. Regel ((lambda (x (lambda (y ((x y z (lambda (a y; => (lambda (y ((x y z[(lambda (a y/x] => (lambda (Y (((lambda (a y Y z; (1., 2., 3., 7. Regel ((lambda (x (lambda (y ((lambda (x (z x (lambda (y (z y (lambda (y y; => (lambda (y ((lambda (x (z x (lambda (y (z y[(lambda (y y/x] => (lambda (y ((lambda (x (z x (lambda (y (z y; (5. Regel

17 (beta-redex? [...] I Aufgabenstellung Es soll geprüft werden, ob ein gegebener Ausdruck ein β-redex ist. ((lambda (x E M ; USAGE: (beta-redex? <parsed-lambda-calculus-expression> ; EXAMPLE: (beta-redex? (parse '((LAMBDA (x (y x z; (def beta-redex? (lambda (exp (if (null? (vector? exp (error 'ERR:beta-redex?:given-expression-must-be-parsed-before-calling-beta-redex? (variant-case exp '( (APP (rator rand (variant-case rator '( (LAMBDA (formal body t (else nil (else nil ;

18 (beta-redex? [...] II ((lambda (x E M ; Beispiele aus Aufgabe (beta-redex? (parse '((LAMBDA (x (x (y x z; >> t; (beta-redex? (parse '((LAMBDA (x (x y (LAMBDA (y (x y; >> t; (beta-redex? (parse '((LAMBDA (x (LAMBDA (y ((x y z (LAMBDA (a y; >> t; (beta-redex? (parse '((LAMBDA (x (LAMBDA (y ((LAMBDA (x (z x (LAMBDA (y (z y (LAMBDA (y y; >> t; ; Beispiele aus Aufgabe (beta-redex? (parse '(LAMBDA (x (y z; >> (; (beta-redex? (parse '((LAMBDA (x (y x z; >> t; (beta-redex? (parse '(LAMBDA (x ((LAMBDA (x (y x z; >> (;

19 (substitute [...] I Aufgabenstellung Gegeben sind die Ausdrücke E, M und die Variable x. Nun soll die Ersetzung E[M/x] durchgeführt werden. (def substitute (lambda (expre exprm varx (if (null? (vector? expre (error 'ERR:substitute:given-first-expression-must-be-parsed-before-calling-substitute (if (null? (vector? exprm (error 'ERR:substitute:given-second-expression-must-be-parsed-before-calling-substitute (variant-case expre `( (VARREF (var (if (eq? var ',varx ',exprm ',expre (LAMBDA (formal body (cond ((eq? formal ',varx ',expre ((null? (FREE? body ',varx ',expre ((null? (eq? formal ',varx (if (null? (FREE? ',exprm formal (make-lambda (list formal (substitute body ',exprm ',varx (if (FREE? body ',varx (substitute (alpha-convert-ast ',expre (symbol ',exprm ',varx (error 'ERR:substitute:undecided:y-isNotEqual-x-and-y-isFreeInM-but-x-isNotFreeInEDash (t (error 'ERR:substitute:should-never-hit-because-X-either-equals-Y-or-not (APP (rator rand (make-app (list (substitute rator ',exprm ',varx (substitute rand ',exprm ',varx (else (error 'substitute:invalid-abstract-syntax ;

20 (substitute [...] II ; Beispiele aus Aufgabe (unparse (substitute (parse '(a b (parse 'c 'b; >> (a c; (unparse (substitute (parse '(LAMBDA (a (a b (parse 'a 'b; >> (LAMBDA (symbol123 (symbol123 a;

21 (beta-reduce [...] I Aufgabenstellung Die β-reduktion soll auf einen gegebenen β-redex Ausdruck angewendet werden. ; USAGE: (beta-reduce <parsed-lambda-calculus-beta-redex-expression> ; EXAMPLE: (unparse (beta-reduce (parse '((LAMBDA (x (y x z; (def beta-reduce (lambda (exp (if (null? (vector? exp (error 'ERR:beta-reduce:given-expression-must-be-parsed-before-calling-beta-reduce (if (null? (beta-redex? exp (error 'ERR:beta-reduce:given-expression-is-no-beta-redex (variant-case exp '( (APP (rator rand (variant-case rator `( (LAMBDA (formal body (substitute body ',rand formal (else (error 'ERR:beta-reduce:no-lambda-found-in-given-expression (else (error 'ERR:beta-reduce:no-application-found-in-given-expression ;

22 (beta-reduce [...] II ; Beispiele aus Aufgabe (unparse (beta-reduce (parse '((LAMBDA (x (y x z; >> (y z; (unparse (beta-reduce (parse '((LAMBDA (x (LAMBDA (y (x y (y w; >> (LAMBDA (symbol123 ((y w symbol123; ; Beispiele aus Aufgabe (unparse (beta-reduce (parse '((LAMBDA (x (x (y x z; >> (z (y z; (unparse (beta-reduce (parse '((LAMBDA (x (x y (LAMBDA (y (x y; >> ((LAMBDA (y (x y y; (unparse (beta-reduce (parse '((LAMBDA (x (LAMBDA (y ((x y z (LAMBDA (a y; >> (LAMBDA (symbol123 (((LAMBDA (a y symbol123 z; (unparse (beta-reduce (parse '((LAMBDA (x (LAMBDA (y ((LAMBDA (x (z x (LAMBDA (y (z y (LAMBDA (y y; >> (LAMBDA (y ((LAMBDA (x (z x (LAMBDA (y (z y; ; Spezielles Beispiel aus Aufgabe (unparse (beta-reduce (parse '((LAMBDA (x (x x (LAMBDA (x (x x; >> ((LAMBDA (x (x x (LAMBDA (x (x x; Im letzten Beispiel entspricht das Resultat dem eingegebenen Ausdruck. Dies liegt nicht daran, dass keine Ersetzung stattgefunden hätte. Die Ersetzung liefert wieder den gleichen Ausdruck.

23 Inhalt η-konversion Einführung - Reduktion von Prozeduren β-konversion Grammatik des Lambda-Kalküls (Wiederholung Transformationsregel und Probleme Formalisierung der Substitution β-konversion, -Redex und -Reduktion Implementierung (beta-redex? [...] Implementierung (substitute [...] Implementierung (beta-reduce [...] η-konversion η-konversion, -Redex und -Reduktion Implementierung (eta-redex? [...] Implementierung (eta-reduce [...] Implementierung (eta-expand [...]

24 η-konversion, -Redex und -Reduktion I Idee Falls eine Prozedur einfach eine zweite Prozedur aufruft und dabei ihre Argumente an die zweite Prozedur übergibt, kann die erste Prozedur entfernt werden. (def extend-ff (lambda (sym val ff (make-extended-ff sym val ff; (def extend-ff make-extended-ff; Definition - η-konversion Die η-konversion wird durch Anwendung der unten beschriebenen Regel durchgeführt. (lambda (x (E x = E Definition - η-redex Ein Ausdruck, auf den die η-konversion angewendet werden kann, heisst η-redex, wobei x in E nicht frei sein darf. (lambda (x (E x Definition - η-reduktion Wird die η-konversion von links-nach-rechts angewendet, um ein η-redex zu transformieren, wird von der η-reduktion gesprochen.

25 (eta-redex? [...] I Aufgabenstellung Es soll geprüft werden, ob ein gegebener Ausdruck ein η-redex ist. (lambda (x (E x (def eta-redex? (lambda (exp (if (null? (vector? exp (error 'ERR:beta-redex?:given-expression-must-be-parsed-before-calling-beta-redex? (variant-case exp '( (LAMBDA (formal body (let ((form formal (variant-case body `( (APP (rator rand (let ((freelist (FREE_VARS rator (if (inlist? freelist ',form nil (variant-case rand '( (VARREF (var (= var ',form (else nil (else nil (else nil ;

26 (eta-redex? [...] II ((lambda (x (E x ; Beispiele aus Aufgabe (eta-redex? (parse '(LAMBDA (x (y x; >> t; (eta-redex? (parse '(LAMBDA (x ((LAMBDA (y y x; >> t; (eta-redex? (parse '((LAMBDA (x (y x z; >> (; (eta-redex? (parse '(LAMBDA (x ((LAMBDA (y x x; >> (;

27 (eta-reduce [...] I Aufgabenstellung Die η-reduktion soll auf einen gegebenen η-redex Ausdruck angewendet werden. ; USAGE: (eta-reduce <parsed-lambda-calculus-beta-redex-expression> ; EXAMPLE: (unparse (eta-reduce (parse '(LAMBDA (x (y x; (def eta-reduce (lambda (exp (if (null? (vector? exp (error 'ERR:eta-reduce:given-expression-must-be-parsed-before-calling-eta-reduce (if (null? (eta-redex? exp (error 'ERR:eta-reduce:given-expression-is-no-eta-redex (variant-case exp '( (LAMBDA (formal body (variant-case body `( (APP (rator rand rator (else exp (else exp ;

28 (eta-reduce [...] II ; Beispiel aus Aufgabe (unparse (eta-reduce (parse '(LAMBDA (x ((LAMBDA (y y x; >> (LAMBDA (y y; ; Beispiel aus Aufgabe (unparse (eta-reduce (parse '(LAMBDA (x (y x; >> y;

29 (eta-expand [...] Aufgabenstellung Ein vorhandener Ausdruck exp soll in die folgende Form gebracht werden. ((lambda (x (exp x ; USAGE: (eta-expand <parsed-lambda-calculus-expression> ; EXAMPLE: (unparse (eta-expand (parse '(LAMBDA (y y; (def eta-expand (lambda (exp (let ((newsym (symbol (make-lambda (list newsym (make-app (list exp (make-varref (list newsym ; ; Beispiele aus Aufgabe (unparse (eta-expand (parse '(LAMBDA (y y; >> (LAMBDA (symbol123 ((LAMBDA (y y symbol123; (unparse (eta-expand (parse '((LAMBDA (v (LAMBDA (y (v y (LAMBDA (x x; >> (LAMBDA (symbol123 (((LAMBDA (v (LAMBDA (y (v y (LAMBDA (x x symbol123;

30 Ende End Fin - Conclude Vielen Dank für Eure Aufmerksamkeit! Fragen? (prog (println 'Vielen 'Dank (if (eq? fragen 1 (error 'ERR:gotta-go (println 'Thanks ;

17 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 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

Mehr

Funktionale Programmierung ALP I. λ Kalkül. Teil 2 WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung ALP I. λ Kalkül. Teil 2 WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I λ Kalkül Teil 2 WS 2012/2013 Lokale Variablennamen Haskell: let x = exp1 in exp2 Lambda: λ exp1. exp2 Einfache Regel: Der Geltungsbereich eines Lambda-Ausdrucks erstreckt sich soweit wie möglich

Mehr

3 Exkurs: Der λ-kalkül

3 Exkurs: Der λ-kalkül 3 Exkurs: Der λ-kalkül Alonso Churchs λ-kalkül (ca. 1940) ist der formale Kern jeder funktionalen Programmiersprache. Der λ-kalkül ist eine einfache Sprache, mit nur wenigen syntaktischen Konstrukten und

Mehr

Konzepte von Programmiersprachen

Konzepte 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

Mehr

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

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

Mehr

Interpreter - Gliederung

Interpreter - 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

Mehr

Interpreter (Hilfsfunktionen)

Interpreter (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

Mehr

Einführung in das λ-kalkül

Einführung in das λ-kalkül Einführung in das λ-kalkül Max Wagner IPD Snelting 1 3.11.2017 Max Wagner - Einführung in das λ-kalkül IPD KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Syntax Abstrakte Syntax:

Mehr

Funktionale Programmierung Einführung

Funktionale Programmierung Einführung Einführung Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 13.09.2017 15:29 Inhaltsverzeichnis Was ist imperative Programmierung.......................

Mehr

Implementierung eines LR-Parser-Generators mit syntaktischen Prädikaten

Implementierung eines LR-Parser-Generators mit syntaktischen Prädikaten Implementierung eines LR-Parser-Generators mit syntaktischen Prädikaten Aufgabenbeschreibung 29. Juli 2011 1 Einleitung und Motivation Der Parser-Generator Antlr [Par07] bietet die Möglichkeit, die Auswahl

Mehr

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.

Die 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

Mehr

Grundlagen der Informatik I

Grundlagen der Informatik I Grundlagen der Informatik I Thema 8: Interpreter-basierte Semantik Intermezzo 1 in HTDP Chap. 4 in SICP () Prof. Dr. Mira Mezini Dr. Michael Eichberg Chapter Overview Thema 8: Interpreter nach dem Substitutionsmodell

Mehr

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Semantische Modelle nebenläufiger Programmiersprachen. Einleitung

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Semantische Modelle nebenläufiger Programmiersprachen. Einleitung Stand der Folien: 24. Januar 2012 Übersicht Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Semantische Modelle nebenläufiger Programmiersprachen 1 2 Call-by-Name

Mehr

Bisher. Programme. Ausdrücke und ihre Auswertung (Substitutionsmodell)

Bisher. 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:

Mehr

Semantik von Programmiersprachen SS 2017

Semantik von Programmiersprachen SS 2017 Lehrstuhl für Programmierparadigmen Denis Lohner Sebastian Ullrich denis.lohner@kit.edu sebastian.ullrich@kit.edu Semantik von Programmiersprachen SS 2017 http://pp.ipd.kit.edu/lehre/ss2017/semantik Lösungen

Mehr

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil III SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil III SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I Lambda-Kalkül Teil III SS 2011 Parser Hilfsfunktionen: Die break-funktion ist eine Funktion Höherer Ordnung, die eine Liste beim ersten Vorkommen einer Bedingung in zwei Listen spaltet. break ::

Mehr

Tagesprogramm

Tagesprogramm 1 2015-10-22 Tagesprogramm Syntax und Semantik Varianten von Schleifen Varianten von Programmverzweigungen 2 2015-10-22 Syntax und Semantik Darstellung der Syntax Syntax: Aufbau der Sätze bzw. Programme

Mehr

7. Syntax: Grammatiken, EBNF

7. Syntax: Grammatiken, EBNF 7. Syntax: Grammatiken, EBNF Teil 1 Sehr schönes Beispiel für Notwendigkeit der Theoretischen Informatik für Belange der Praktischen Informatik Vertiefung in: Einführung in die Theoretische Informatik

Mehr

Funktionale Programmierung ALP I. λ Kalkül WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung ALP I. λ Kalkül WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I λ Kalkül WS 2012/2013 Berechenbarkeit - inspiriert durch Hilbert's Frage - im Jahr 1900, Paris - Internationaler Mathematikerkongress Gibt es ein System von Axiomen, aus denen alle Gesetze der Mathematik

Mehr

SWP Funktionale Programme (2. Teil)

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

Mehr

Bisher. Programme, Sequenzen von Formen. Ausdrücke und ihre Auswertung (Substitutionsmodell)

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

Mehr

Programmierparadigmen

Programmierparadigmen 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 2011-13 D.Rösner D.

Mehr

. Lisp. Moritz Heidkamp 25. April 2011

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

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces 12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2008/09 Einführung in die Informatik 2 Klausur Prof. Dr. Helmut Seidl, T. M. Gawlitza, S. Pott,

Mehr

Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR.

Methoden 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

Mehr

1 Maschinenunabhängige Optimierungen. Maschinenunabhängige Optimierungen Wintersemester 2008/09 1 / 17

1 Maschinenunabhängige Optimierungen. Maschinenunabhängige Optimierungen Wintersemester 2008/09 1 / 17 1 Maschinenunabhängige Optimierungen Maschinenunabhängige Optimierungen Wintersemester 2008/09 1 / 17 Optimierungen Automatische Optimierungen sind nötig, weil unoptimierter Code meist besser lesbar ist.

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Vorlesung 10: Ein Interpreter für While Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1

Mehr

1 Erste Schritte in Scheme

1 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

Mehr

Einführung in die funktionale Programmierung

Einführung in die funktionale Programmierung Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 17. Oktober 2006 Einführung in Haskell: Syntax, Reduktionen, Kernsprachen Haskell,

Mehr

Theoretische Informatik II

Theoretische Informatik II Vorlesung Theoretische Informatik II Bernhard Beckert Institut für Informatik Wintersemester 2007/2008 B. Beckert Theoretischen Informatik II: WS 2007/08 1 / 179 Dank Diese Vorlesungsmaterialien basieren

Mehr

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter Fallstudie: Arithmetische Ausdrücke AG Softech FB Informatik TU Kaiserslautern Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick

Mehr

Der untypisierte Lambda-Kalkül als Programmiersprache

Der untypisierte Lambda-Kalkül als Programmiersprache Der untypisierte Lambda-Kalkül als Programmiersprache November 29, 2006 betreut von Prof. Tobias Nipkow Einführung In den 1930er Jahren von Alonzo Church und Stephen Kleene eingeführt Der Lambda-Kalkül

Mehr

Scala. Funktionale (Zustandslose) Objekte

Scala. Funktionale (Zustandslose) Objekte Scala Funktionale (Zustandslose) Objekte Agenda Was sind Funktionale Objekte? veränderliche Objekte vs. unveränderliche Objekte Klassen Parameter Konstruktoren Private Member Methoden und Operatoren Overriding

Mehr

Funktionale Programmierung. Das Funktionale Quiz. Das Funktionale Quiz. Das Funktionale Quiz

Funktionale 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

Mehr

Die abstrakte Klasse Expression:

Die abstrakte Klasse Expression: Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const 501 Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const Leider (zum Glück?) lässt sich nicht die

Mehr

Objektorientierte Programmierung mit C++ (WS 2016/2017)

Objektorientierte 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

Mehr

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Sommersemester

Mehr

Allgemeine Hinweise:

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen SS 2011 Einführung in die Informatik I Midtermklausur Prof. Dr. Helmut Seidl, A. Lehmann, A. Herz,

Mehr

13 Berechenbarkeit und Aufwandsabschätzung

13 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

Mehr

16 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 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

Mehr

Der einfach getypter Lambda-Kalkül

Der einfach getypter Lambda-Kalkül Der einfach getypter Lambda-Kalkül Typprüfung und Typinferenz Tobias Nipkow und Steffen Smolka Technische Universität München 1 Einleitung 2 Explizit getypter λ-kalkül 3 Implizit getypter λ-kalkül Statische

Mehr

1. Probeklausur zur Programmierung I

1. Probeklausur zur Programmierung I DEPENDABLE SYSTEMS AND SOFTWARE Fachrichtung 6.2 Informatik Tutoren der Vorlesung 1. Probeklausur zur Programmierung I Name: Matrikelnummer: Bitte öffnen Sie das Klausurheft erst dann, wenn Sie dazu aufgefordert

Mehr

4.4 Imperative Algorithmen Prozeduren

4.4 Imperative Algorithmen Prozeduren 4.4.2 Prozeduren Der Wert eines Ausdrucks u in Zustand z Z lässt sich damit auch leicht definieren (jetzt W Z statt W σ ) Dazu erweitern wir die rekursive Definition von Folie 57 (Wert eines Ausdrucks):

Mehr

Kapitel 3: Anweisungen

Kapitel 3: Anweisungen Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II -66 Kapitel : Anweisungen Bedingte Anweisungen (Verzweigungen) Wiederholte Anweisungen (Schleifen) Abweisschleife Durchlaufschleife

Mehr

Informatik I. 11. Prozeduren als Daten. 9. Dezember Albert-Ludwigs-Universität Freiburg. Informatik I. Jan-Georg Smaus. Prozeduren als Eingabe

Informatik 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

Mehr

Berechenbarkeit und Komplexität Vorlesung 11

Berechenbarkeit und Komplexität Vorlesung 11 Berechenbarkeit und Komplexität Vorlesung 11 Prof. Dr. Wolfgang Thomas Lehrstuhl Informatik 7 RWTH Aachen 7. Dezember 2014 Wolfgang Thomas, Informatik 7 () Vorlesung Berechenbarkeit und Komplexität 7.

Mehr

8 Prozeduren als Daten

8 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

Mehr

Einführung in die Programmiertechnik

Einführung in die Programmiertechnik Einführung in die Programmiertechnik Formale Beschreibung von Programmiersprachen Lexikalische Regeln Definition von Wörtern (Lexem, Token) Gruppierung von Zeichen Lexikalische Kategorien: Klassen ähnlicher

Mehr

Übersetzerbau Cluj-Napoca, Rumänien 2007

Übersetzerbau Cluj-Napoca, Rumänien 2007 Übersetzerbau Cluj-Napoca, Rumänien 2007 Markus Löberbauer Institut für Systemsoftware Johannes Kepler Universität, 4040 Linz, Österreich Loeberbauer@ssw.jku.at 2007-02-01 Zusammenfassung In dieser Übung

Mehr

Theoretische Informatik II

Theoretische Informatik II Theoretische Informatik II Dr. Eva Richter / Holger Arnold Universität Potsdam, Theoretische Informatik, Sommersemester 2008 Übungsblatt 3 (Version 4) Abgabetermin: 13.5.2008, 12.00 Uhr Der λ-kalkül Da

Mehr

Grundlagen der Programmierung 3 A

Grundlagen der Programmierung 3 A Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2016 Haskell, Typen, und Typberechnung Ziele: Haskells Typisierung Typisierungs-Regeln

Mehr

Einführung in die funktionale Programmierung

Einführung in die funktionale Programmierung Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 28. Oktober 2008 Einführung in Haskell: Syntax, Reduktionen, Kernsprachen Haskell,

Mehr

Der untypisierte Lambda-Kalkül

Der untypisierte Lambda-Kalkül Der untypisierte Lambda-Kalkül Der Lambda-Kalkül wurde zur Beschreibung des mathematischen Begriffs Funktion entwickelt. Die Menge aller Lambda-Ausdrücke Exp ist folgendermaßen definiert: x Exp wenn x

Mehr

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen

Mehr

C.3 Funktionen und Prozeduren

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

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Methoden / Funktionen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick 2 Zweck von Methoden 3 Methodendefinition

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2011/12 Überblick I Refactoring Code-Transformationen:

Mehr

15. Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen

15. Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen 453 15. Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen Mathematische Rekursion 454 Viele mathematische Funktionen sind sehr natürlich rekursiv

Mehr

EWS, WS 2016/17 Pfahler I-1

EWS, WS 2016/17 Pfahler I-1 Vorlesung und Übung Universität Paderborn Wintersemester 2016/2017 Dr. Peter Pfahler Funktionen EWS, WS 2016/17 Pfahler I-1 Funktionen Funktion: Rechenvorschrift mit einem Namen und ggf. formalen Parametern,

Mehr

Lösung Probeklausur Informatik I

Lö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

Mehr

Ein Fragment von Pascal

Ein Fragment von Pascal Ein Fragment von Pascal Wir beschreiben einen (allerdings sehr kleinen) Ausschnitt von Pascal durch eine kontextfreie Grammatik. Wir benutzen das Alphabet Σ = {a,..., z, ;, :=, begin, end, while, do} und

Mehr

Kapitel 3. Syntax und Semantik von arithmetischen Ausdrücken. 3.1 Syntax

Kapitel 3. Syntax und Semantik von arithmetischen Ausdrücken. 3.1 Syntax Kapitel 3 Syntax und Semantik von arithmetischen Ausdrücken In diesem Kapitel führen wir einige grundlegende Konzepte für logische Sprachen ein. Wir tun dies am Beispiel einer einfachen Sprache AA, deren

Mehr

Grundlagen der Programmierung 3 A

Grundlagen der Programmierung 3 A Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Haskell, Typen, und Typberechnung Ziele: Haskells Typisierung Typisierungs-Regeln

Mehr

Syntax von Programmiersprachen

Syntax von Programmiersprachen Syntax von Programmiersprachen SEP 209 Programmiersprachen Sprache = Menge von Wörtern, typischerweise unendlich Programmiersprache: Wörter repräsentieren Programme Programm kann auf einem Computer evtl.

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Fallstudie: Arithmetische Ausdrücke Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick

Mehr

Haskell, Typen, und Objektorientierung

Haskell, Typen, und Objektorientierung Haskell, Typen, und Objektorientierung ZIELE dieses Kapitels Haskells Typisierung Milners Polymorpher Typcheck Haskells Typklassen P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite

Mehr

Fallstudie: Nim Spiel

Fallstudie: 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

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Überblick für heute Programmierparadigmen Imperative vs. deklarative Programmierung Beispiele Funktionale Programmierung

Mehr

Formale Systeme, WS 2008/2009 Lösungen zum Übungsblatt 2

Formale Systeme, WS 2008/2009 Lösungen zum Übungsblatt 2 UNIVERSITÄT KARLSRUHE (TH) Institut für Theoretische Informatik Prof. Dr. B. Beckert M. Ulbrich Formale Systeme, WS 2008/2009 Lösungen zum Übungsblatt 2 Dieses Blatt wurde in der Übung am 14.11.2008 besprochen.

Mehr

Vorsicht bei redundanten und unvollständigen Matches!

Vorsicht bei redundanten und unvollständigen Matches! Vorsicht bei redundanten und unvollständigen Matches! # let n = 7;; val n : int = 7 # match n with 0 -> "null";; Warning: this pattern-matching is not exhaustive. Here is an example of a value that is

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster

Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster 16:02:16 2017-01-17 1 [30] Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom 10.01.2017: Monaden als Berechnungsmuster Christoph Lüth Universität Bremen Wintersemester 2016/17 Frohes

Mehr

Operationale Semantik: Haskell

Operationale Semantik: Haskell Kapitel 4 Operationale Semantik: Haskell 4.1 Semantik von Programmiersprachen Programme sind zunächst mal nur Text. Programme sollen aber etwas im Rechner bewirken bzw. eine Funktion oder Funktionalität

Mehr

Kapitel 5: Syntaxdiagramme und Grammatikregeln

Kapitel 5: Syntaxdiagramme und Grammatikregeln 5. Syntaxdiagramme und Grammatikregeln 5-1 Objektorientierte Programmierung (Winter 2010/2011) Kapitel 5: Syntaxdiagramme und Grammatikregeln Syntaxdiagramme Grammatikregeln (kontextfrei) Beispiele: Lexikalische

Mehr

Aufgabe 1.1. Wählen Sie jene Variablendeklarationen mit Initialisierungen aus, die in Java hinsichtlich der Typen korrekt sind:

Aufgabe 1.1. Wählen Sie jene Variablendeklarationen mit Initialisierungen aus, die in Java hinsichtlich der Typen korrekt sind: Test 1 in Programmkonstruktion 59 / 100 Punkte 1. Multiple-Choice-Aufgaben 20 / 30 Punkte Bitte wählen Sie alle zutreffenden Antwortmöglichkeiten aus. Es können beliebig viele Antwortmöglichkeiten zutreffen,

Mehr

Der λ-kalkül. Frank Huch. Sommersemester 2015

Der λ-kalkül. Frank Huch. Sommersemester 2015 Der λ-kalkül Frank Huch Sommersemester 2015 In diesem Skript werden die Grundlagen der Funktionalen Programmierung, insbesondere der λ-kalkül eingeführt. Der hier präsentierte Stoff stellt einen teil der

Mehr

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen

Mehr

Validation und Quick Fixing mit Xtend. 3. Dezember 2014

Validation und Quick Fixing mit Xtend. 3. Dezember 2014 Validation und Quick Fixing mit Xtend 3. Dezember 2014 175 Überblick Tuning der Xtext-generierten Editoren Validierung mit OCL auf der abstrakten Syntax mit Xtend auf der konkreten Syntax Quick Fixes mit

Mehr

DieÜbersetzung funktionaler Programmiersprachen

DieÜbersetzung funktionaler Programmiersprachen DieÜbersetzung funktionaler Programmiersprachen 107 11 Die Sprache PuF Wir betrachten hier nur die Mini-Sprache PuF( Pure Functions ). Insbesondere verzichten wir(vorerst) auf: Seiteneffekte; Datenstrukturen;

Mehr

Informatik I Übung, Woche 40

Informatik I Übung, Woche 40 Giuseppe Accaputo 1. Oktober, 2015 Plan für heute 1. Nachbesprechung Übung 2 2. Vorbesprechung Übung 3 3. Zusammenfassung der für Übung 3 wichtigen Vorlesungsslides Informatik 1 (D-BAUG) Giuseppe Accaputo

Mehr

Grundlagen der Programmierung 2. Operationale Semantik

Grundlagen 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

Mehr

Programmierkurs Python I

Programmierkurs Python I Programmierkurs Python I Michaela Regneri & Stefan Thater Universität des Saarlandes FR 4.7 Allgemeine Linguistik (Computerlinguistik) Winter 2010/11 Übersicht Kurze Wiederholung: while Sammeltypen (kurz

Mehr

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at Inhalt SWP Funktionale Programme (2. Teil) Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at Interpreter für funktionale Sprache

Mehr

Tableaukalkül für Aussagenlogik

Tableaukalkül für Aussagenlogik Tableaukalkül für Aussagenlogik Tableau: Test einer Formel auf Widersprüchlichkeit Fallunterscheidung baumförmig organisiert Keine Normalisierung, d.h. alle Formeln sind erlaubt Struktur der Formel wird

Mehr

Allgemeines. Shell Programmierung Unix. Kommentar. Vorgangsweise. Mag. Thomas Griesmayer

Allgemeines. Shell Programmierung Unix. Kommentar. Vorgangsweise. Mag. Thomas Griesmayer Allgemeines Shell Programmierung Unix Shell Scripts Unix Ein shell script ist eine Textdatei, welche eine Liste von Befehlen (Standard Unix Befehle) beinhaltet. Diese Datei kann durch Aufrufen ausgeführt

Mehr

Stratego/XT und ASF+SDF Meta-Environment. Paul Weder Seminar Transformationen Datum:

Stratego/XT und ASF+SDF Meta-Environment. Paul Weder Seminar Transformationen Datum: Stratego/XT und ASF+SDF Meta-Environment Paul Weder Seminar Transformationen Datum: 20.01.2006 Gliederung Allgemeines ASF+SDF Meta-Environment Stratego/XT Zusammenfassung/Vergleich SDF (Syntax Definition

Mehr

Tracing Testing Zusammenfassung. Testing und Tracing. Diana Hille. 14. Januar 2008

Tracing Testing Zusammenfassung. Testing und Tracing. Diana Hille. 14. Januar 2008 und 14. Januar 2008 und Motivation HAT allgemein Allgemeine Verfahren Weitere Verfahren Motivation fehlerhaftes Programm: main = let xs :: [Int] xs = [1,2,3] in print (head xs,last xs) last (x:xs) = last

Mehr

1. Typen 1.1 Typsicherheit 1.2 Typprüfung

1. Typen 1.1 Typsicherheit 1.2 Typprüfung 1. Typen 1.1 Typsicherheit 1.2 Typprüfung Ein Typsystem ist ein praktikables, syntaktisches Verfahren, mit dem man die Abwesenheit gewisser Laufzeit-Eigenschaften eines Programms beweisen kann, indem man

Mehr

Imperative und funktionale Sprachen

Imperative und funktionale Sprachen Imperative und funktionale Sprachen Merkmale imperativer Sprachen: Konzepte: Variablen, Zuweisungen, Sequentialität Programm-Semantik spiegelt Rechnerarchitektur wider Schleifen spielen eine große Rolle

Mehr

GTI. Hannes Diener. 18. Juni. ENC B-0123,

GTI. Hannes Diener. 18. Juni. ENC B-0123, GTI Hannes Diener ENC B-0123, diener@math.uni-siegen.de 18. Juni 1 / 32 Als Literatur zu diesem Thema empfiehlt sich das Buch Theoretische Informatik kurzgefasst von Uwe Schöning (mittlerweile in der 5.

Mehr

10. Linksassoziative Grammatik (LAG)

10. Linksassoziative Grammatik (LAG) Kapitel 10: Linksassoziative Grammatik (LAG) 168 10 Linksassoziative Grammatik (LAG) 101 Regeltypen und Ableitungsordnung 1011 Der Begriff linksassoziativ When we combine operators to form expressions,

Mehr

Linux II. Reguläre Ausdrücke Editoren Scripting. 2 Linux II. Linux I II III Res WN/TT NLTK XML Weka E Reguläre Ausdrücke Editoren Scripting

Linux II. Reguläre Ausdrücke Editoren Scripting. 2 Linux II. Linux I II III Res WN/TT NLTK XML Weka E Reguläre Ausdrücke Editoren Scripting Linux II 2 Linux II Reguläre Ausdrücke Editoren Scripting Reguläre Ausdrücke Reguläre Ausdrücke beschreiben eine Menge von Zeichenfolgen und werden benutzt um m festzustellen, ob eine Zeichenkette Teil

Mehr

1 Geschichte. 2 Syntax und Konzepte. Lamdba-Kalkül

1 Geschichte. 2 Syntax und Konzepte. Lamdba-Kalkül 1 Geschichte 1673 Gottfried Wilhelm Leibniz entwickelt eine mechanische Rechenmaschine, beginnt zu träumen: Gibt es eine universelle Sprache, in der alle Probleme dargestellt werden können? Gibt es eine

Mehr

Logikprogrammierung. Berechnung durch Resolution Die Programmiersprache Prolog

Logikprogrammierung. Berechnung durch Resolution Die Programmiersprache Prolog Logikprogrammierung Berechnung durch Resolution Die Programmiersprache Prolog Theoretische Informatik: Logik, M. Lange, FB16, Uni Kassel: 6.1 Logikprogrammierung Berechnung durch Resolution 213 Resolution

Mehr