Vortrag. Vortrag im Rahmen der Master-Vorlesung Semantik von Programmiersprachen an der FH München, Fachbereich Informatik
|
|
- Rosa Sara Linden
- vor 5 Jahren
- Abrufe
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 Toplevel Definitionen set! 17.1 Programme als Datenstruktur 17.1.1
MehrFunktionale 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
Mehr3 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
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
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
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
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
MehrEinfü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:
MehrFunktionale 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.......................
MehrImplementierung 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
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
MehrGrundlagen 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
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
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:
MehrSemantik 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
MehrFunktionale 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 ::
MehrTagesprogramm
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
Mehr7. 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
MehrFunktionale 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
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,
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
MehrProgrammierparadigmen
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 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,
Mehr12 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,
MehrAllgemeine 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,
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
Mehr1 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.
MehrProgrammieren 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
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
MehrEinfü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,
MehrTheoretische 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
MehrSoftware 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
MehrDer 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
MehrScala. 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
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
MehrDie 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
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
MehrHaskell, 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
MehrAllgemeine 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,
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
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
MehrDer 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
Mehr1. 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
Mehr4.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):
MehrKapitel 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
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
MehrBerechenbarkeit 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.
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
MehrEinfü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 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
MehrTheoretische 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
MehrGrundlagen 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
MehrEinfü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,
MehrDer 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
Mehrzu 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
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
MehrEinstieg 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
MehrVorlesung 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:
Mehr15. 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
MehrEWS, 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,
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
MehrEin 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
MehrKapitel 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
MehrGrundlagen 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
MehrSyntax 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.
MehrSoftware 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
MehrHaskell, 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
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
MehrSoftware 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
MehrFormale 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.
MehrVorsicht 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
MehrPraktische 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
MehrOperationale 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
MehrKapitel 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
MehrAufgabe 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,
MehrDer λ-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
Mehrzu 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
MehrValidation 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
MehrDieÜ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;
MehrInformatik 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
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
MehrProgrammierkurs 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
MehrEinfache 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
MehrTableaukalkü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
MehrAllgemeines. 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
MehrStratego/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
MehrTracing 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
Mehr1. 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
MehrImperative 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
MehrGTI. 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.
Mehr10. 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,
MehrLinux 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
Mehr1 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
MehrLogikprogrammierung. 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