Einführung in die funktionale Programmierung
|
|
- Bärbel Walter
- vor 5 Jahren
- Abrufe
Transkript
1 Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 18. November 2008
2 Typcheck zu KFPT; KFPTS;... Ziele des Kapitels: Polymorphes Typsystem für alle Konstrukte von KFPTSP Typsystem unabhängig vom Haskell-Typcheck Soll das Typsystem von Haskell verständlich machen Funktionalität des Formalismus Grenzen; und Vor- und Nachteile zwei Varianten des Typchecks Einführung in die funktionale Programmierung, fol
3 Polymorpher Typcheck in KFPTS(P) Urväter dieses Typsystems: Hindley, Milner, Mycroft, Abramsky, Damas Wird verwendet in Haskell, ML Ebenso in Java ( leicht angepasst) Einführung in die funktionale Programmierung, fol
4 Polymorpher Typcheck in KFPTS(P) Annahmen KFPTSP ist die Grundlage: Es gibt eine Typsyntax, Typen und Typkonstruktoren Der Typ der Daten-Konstruktoren ist vorgegeben Ein case-konstrukt pro abstraktem Datentyp (mit data type deklariert) (nicht für den Funktionsdatentyp a b) rekursive Superkombinatoren sind erlaubt. Einführung in die funktionale Programmierung, fol
5 Erwünschte Eigenschaften eines Typsystems Wenn Typcheck erfolgreich, dann keine dynamischen Typfehler (d.h. zur Laufzeit) Flexibles Programmieren trotz Typenbeschränkungen Typisierung sollte entscheidbar sein. Falls möglich: effizient Jeder Ausdruck und Unterausdruck muss einen Typ haben. Einführung in die funktionale Programmierung, fol
6 Wiederholung; Exp-Syntax von KFPT: Exp ::= V (Variablen) (\V -> Exp) (Exp 1 Exp 2 ) (c T yp Exp 1... Exp n ) (wobei n = ar(c) ) (case Typ Exp of {P at 1 -> Exp 1 ;... ; P at n -> Exp n }) (P at i sind alle einfachen Pattern zum Typ des case) Pat ::= (c V 1... V ar(c) ) Die Variablen V i müssen alle verschieden sein. Einführung in die funktionale Programmierung, fol
7 Dynamische Typfehler Definition: Ein dynamischer Typfehler tritt auf, wenn: Die Normalordnung versucht folgendes auszuwerten: (case Typ (c...)...) wobei c kein Konstruktor zu Typ ist. (case Typ (\x->s)...) (case Typ (sc t1.. tn)...) und n < ar(sc) ((c...) t) wobei c ein Konstruktor ist. Einführung in die funktionale Programmierung, fol
8 Dynamische Typfehler Satz Es gibt kein (entscheidbares) Typsystem in KFPT (KFPTS), das genau die Ausdrücke erkennt, die keine dynamischen Typfehler verursachen. Beweis-Skizze Zurückführung auf das Halteproblem: Betrachte den Ausdruck if t then case_bool Nil {p1-> (Nil Nil) ;... } else case_bool Nil {p1-> (Nil Nil) ;... } Falls t nur True, False, (oder Nichtterminierung) ergeben kann, dann ergibt sich ein Typfehler genau dann wenn t terminiert. Als t kann man eine Turingmaschine in KFPT kodieren D.h.: Lösung des Halteproblem Existenz eines exakten Typcheckers Einführung in die funktionale Programmierung, fol
9 Nicht-Existenz eines exakten Typcheckers: Konsequenzen Angenommen, wir haben ein entscheidbares Typsystem, das keine dynamischen Typfehler zulässt. Dann gibt es ungetypte Ausdrücke, die keine dynamischen Typfehler verursachen. Erweiterung des entscheidbaren Typsystems sind immer möglich; sind trotzdem nie exakt. Einführung in die funktionale Programmierung, fol
10 Polymorphe Typen (Hindley; Milner; Mycroft) Syntax Typ ::= Typkonstante Typvariable (TC Typ 1... Typ n ) Wobei TC Stelligkeit n hat. elementarer Typ = Basistyp, d.h. Konstante Grundtyp,monomorpher Typ. = Typ ohne Typvariablen polymorph = mit Typvariablen Einführung in die funktionale Programmierung, fol
11 Polymorphe Typen (Typ-)Variable: Typkonstruktor: Gleiche Variablen bedeuten gleichen Typ. zu jedem algebraischen Datentyp gibt es einen. Die Stelligkeit der Konstruktoren ist festgelegt. zweistelliger Typ-Konstruktor für Funktionen. Einführung in die funktionale Programmierung, fol
12 Bedeutung der Typen Zwei Möglichkeiten: (A) (B) Als Menge von Grundtypen Als Formel erster Ordnung: Aussage über Argument und Ergebnistypen einer Funktion Beispiel: (A) (B) Cons: α [α] [α] Die Menge der Typen von Cons ist: {τ [τ] [τ] τ ist ein Grundtyp}. α.α [α] [α]: Für alle Eingaben... ist die Ausgabe vom Typ [α]. Betrachtungsweise: Jeder Ausdruck hat eine Menge von Grundtypen Einführung in die funktionale Programmierung, fol
13 Weitere Annahmen zu Datenkonstruktoren Annahmen: Typ des Datenkonstruktors gibt die Stelligkeit an, und die möglichen Typen und Typkombinationen der Argumente. Zieltyp muss von der Form T α 1... α n sein, wobei T Typkonstruktor des zugehörigen algebraischen Datentyps und die α i verschiedene Typvariablen sind. Nur α 1... α n können als Typvariablen in Argumenttypen von Konstruktoren vorkommen Das schließt im Moment GADT aus, ebenso existenzielle Typen in Konstruktor-Deklarationen (Wird in WX-Haskell benötigt) Einführung in die funktionale Programmierung, fol
14 Beispiele zu Datenkonstruktoren Paare: (.,.) : α β (α, β) Listen: Nil: [α] und : : α [α] [α] Boolesche Werte: True: Bool und False: Bool. Einführung in die funktionale Programmierung, fol
15 Beispiel: Bäume Data Tree a = Node a (Tree a) (Tree a) Leaf a Tree ist der einstellige Typkonstruktor. Node,Leaf sind die (Daten-)Konstruktoren. Node: α (Tree α) (Tree α) (Tree α) Leaf: α (Tree α) Einführung in die funktionale Programmierung, fol
16 Instanz eines polymorphen Typs (Typ-)Substitution σ: ist Abbildung : Typ-Ausdrücke Typen definiert auf den Typ-Variablen Anwendungsregeln: σ α = σα σ (c t 1... t n ) = (c (σ t 1 )... (σ t n )) Beispiel Instanzen von [α] sind [Int] mit {α Int} [[α]] mit {α [α]} [β Int] mit {α (β Int)} Einführung in die funktionale Programmierung, fol
17 Typregeln (auf Grundtypen) für KFPTSP Idee der Typregeln: Die Regeln berechnen Grundtypen von Ausdrücken (i.a.unendlich viele) Grundtypen Ist scheinbar umständlich, Aber allgemeiner als polymorphe Typ-Schemata. Einführung in die funktionale Programmierung, fol
18 Typregeln (auf Grundtypen) für KFPTSP Aufbau einer Regel: bisherige Folgerungen neue Folgerung Typannahme t : τ ist eine Einzel-Komponente (judgement) Bisherige Folgerungen = Liste von Komponenten neue Folgerungen bestehen aus einer Komponente Regeln ohne Voraussetzungen sind Axiome. Bei diesen wird die Annahme und der Strich weggelassen. Einführung in die funktionale Programmierung, fol
19 Typregeln (auf Grundtypen) für KFPTSP Typannahmen A: Variablen x sind eine Menge von Annahmen über die möglichen Typen der freien Variablen und bekanntes Wissen über die Typen der Konstanten bzw. Funktionssymbole haben höchstens eine Typannahme x : τ in jedem A Superkombinatoren werden getrennt behandelt Konstanten c können mehrere Typannahmen haben: c : τ 1,..., c : τ n. I.A. Menge aller Grundinstanzen eines polymorphen Typs Typangabe c : (σ). Einführung in die funktionale Programmierung, fol
20 Typregeln Die Typregeln definieren eine Herleitbarkeitsrelation A s : τ bedeutet, dass aus A der Typ τ für s herleitbar ist. I.a. ist eine Menge von Typen für einen Term herleitbar. Oft ist diese Menge eine Instanzmenge eines polymorphen Typs. Einführung in die funktionale Programmierung, fol
21 Typen und Typklassen Mit der Typmengen-Methode kann man einige Beschränkungen des Typklassensystem modellieren: Typen von +: {Int Int Int, Integer Integer Integer,...}. Das sind endlich viele; Diese Menge ist nicht als Instanz eines polymorphen Typs darstellbar. Einführung in die funktionale Programmierung, fol
22 Typregeln τ, τ i sind Grundtypen, T Menge von Grundtypen. Axiom für Konstanten A {c : T } c : τ wenn τ T Axiom für Konstanten (polymorphe Typen) A {c : (σ)} c : τ wenn τ Grundinstanz von σ Axiome für freie Variablen A {x : τ} x : τ Einführung in die funktionale Programmierung, fol
23 Typregeln Anwendungsregel: Superkombinator-Regel A a : (τ 1 τ 2 ); A b : τ 1 A (a b) : τ 2 A {x 1 : τ 1,... x n : τ n } e : τ; sc x 1... x n = e ist die Definition für den Superkombinator sc A sc : τ 1... τ n τ Nebenbedingung: A hat keine Annahmen über x i Abstraktion: A {x : τ 1 } t : τ 2 A (λx.t) : τ 1 τ 2 Einführung in die funktionale Programmierung, fol
24 Typregeln case-regel: µ ist Typ zu Typkonstruktor D A e : µ A {x 1,1 : τ 1,1... x 1,n(1) : τ 1,n(1) } (c 1 x 1,1... x 1,n(1) ) : µ... A {x m,1 : τ m,1... x m,n(m) : τ m,n(m) } (c m x m,1... x m,n(m) ) : µ A {x 1,1 : τ 1,1... x 1,n(1) : τ 1,n(1) } e 1 : τ... A {x m,1 : τ m,1... x m,n(m) : τ m,n(m) } e m : τ A (case D e {(c 1 x 1,1... x 1,n(1) ) e 1 ;... ; (c m x m,1... x m,n(m) ) e m }) : τ Es reicht aus, sich zu merken: e und alle Pattern haben gleichen Typ der zu D gehört ebenso die entsprechenden Unterterme alle e i und der Gesamt-case-Ausdruck haben gleichen Typ. Einführung in die funktionale Programmierung, fol
25 Typregeln; Anmerkungen Die Typregeln für Abstraktionen, Superkombinatoren und case verändern die Menge der Typannahmen: und zwar um lokale Annahmen für gebundene Variablen Einführung in die funktionale Programmierung, fol
26 Typregeln Obige Regeln sind ausreichend für Typen von nicht rekursiv definierten Superkombinatoren Man stellt fest, dass oft polymorphe Typen (Schemata) für die Menge der herleitbaren Typen eines (nicht-rekursiven) Superkombinatoren herleitbar sind. Einführung in die funktionale Programmierung, fol
27 Wohlgetypte Ausdrücke Definition Ein Ausdruck t ist (bzgl des Grundtypensystem) wohlgetypt, wenn man für t mindestens einen Typ herleiten kann. D.h. A t :: τ soll herleitbar sein. Hierbei darf A nur Annahmen zu Variablen enthalten, die frei in t vorkommen. Es gilt Bei geschlossenen Ausdrücken muss A = sein Wenn t wohlgetypt ist, dann auch alle Unterausdrücke von t. Einführung in die funktionale Programmierung, fol
28 Typregeln: Beispiele Abstraktion Id := λx.x: {x : τ} x : τ λx.x : τ τ wobei τ ein (beliebiger) Grundtyp ist. D.h. λx.x hat alle Typen der Form {τ τ}. Das ist gerade die Menge der Instanzen von α α. Einführung in die funktionale Programmierung, fol
29 Typregeln: Beispiele unitlist x = Cons x Nil Menge der Annahmen: A = {x : τ, (Nil : [β]), Cons : (α [α] [α])} 1. A (Cons x) : [τ] [τ] 2. A (Cons x Nil) : [τ] 3. Superkombinatorregel: unitlist: τ [τ]. Für alle Grundtypen τ gilt: unitlist: τ [τ]. Auch hier: unitlist : α [α] Einführung in die funktionale Programmierung, fol
30 Typregeln: Beispiele twice f x = f (f x) Typannahme A = {x : τ 1, f : τ 2 }. 1. Der Typ von (f x) muss existieren: deshalb muss f : τ 2 = τ 1 τ 3 sein, wobei τ 3 noch unbestimmt ist. a (f x) : τ Nur Annahmen der Form A = {x : τ 1, f : τ 1 τ 3 } sind sinnvoll 3. Typ von f (f x) muss existieren: Argumentvariablen haben nur einen Typ: Also τ 1 = τ 3 und f (f x): τ A = {x : τ 1, f : τ 1 τ 1 } herleitbar: f (f x): τ 1 5. Mit der Superkombinatorregel: twice: (τ τ) τ τ. 6. Polymorpher Typ von twice :: (α α) α α Einführung in die funktionale Programmierung, fol
31 Anmerkungen Statt mit x : τ Grundtypen durchzuprobieren : Evtl. besser: x : α mit Typvariable α. Wesentlich für das Typsystem: Nur eine Grundtypannahme für lokale Variablen (ohne Quantoren) keine Menge o.ä. Lambda-gebundene Variablen dürfen nicht polymorph verwendet werden Das ist eine echte Einschränkung, falls Variablen vom Funktionstyp Einführung in die funktionale Programmierung, fol
32 Beispiel selfapply selfapply kommt als Unterausdruck in der Definition des Fixpunktkombinators Y vor. selfapply x = x x Typ von selfapply nach zwei verschiedenen Methoden: 1. lambda-gebundene Variablen sind monomorph 2. Argumente dürfen eine Menge von Typen haben. (was wäre wenn,...) Polymorphismus mit höherem Rang. Einführung in die funktionale Programmierung, fol
33 Beispiel selfapply selfapply x = x x Unter der Annahme, dass lambda-gebundene Variablen monomorph sind. 1. Annahme: {x : τ} 2. (x x) hat Typ, deshalb τ = τ 1 τ 2 und τ 1 = τ. Fehler, denn solche Grundtypen, gibt es nicht. Damit hat Y = λf.(λx.f(x x)) (λx.f(x x)) keinen polymorphen Typ Aber: (selfapply x) kann vernünftig sein: Z.B: selfapply I (I I) I. Einführung in die funktionale Programmierung, fol
34 Beispiel selfapply: ohne Monomorphie- Annahme zu lambda-gebundenen Variablen Als versuchsweise Erweiterung des Typsystems: eine Menge von Typen ist erlaubt pro Variable 1. {selfapply : S; x : T } 2. (x x) muss einen Typ haben T muss erfüllen: Es gibt Typen τ 1 T und τ 1 τ 2 T 3. Die von T abgeleitete Typmenge von (x x) ist dann: T 1 = {τ 2 Es gibt τ 1 τ 2 T und τ 1 T } D.h. selfapply: T {τ 2 Es gibt τ 1 τ 2 T und τ 1 T } Der Mengen-Typ von selfapply ist keine Instanz eines polymorphen Typausdrucks, sondern eine komplexere Bedingung an Mengen von Grundtypen. Einführung in die funktionale Programmierung, fol
35 Typen für rekursive Superkombinatoren Das bisherige Typsystem kann keine Typen für rekursiv definierte Superkombinatoren herleiten, da die Definition der Herleitbarkeit dann zyklisch ist. Einführung in die funktionale Programmierung, fol
36 Erweiterung des Typsystems Erweiterung zur Berechnung von Typen von rekursiven Superkombinatoren Einführung in die funktionale Programmierung, fol
37 Typen für rekursive Superkombinatoren Konsistente Annahme Programm: sc 1 = e 1,..., sc n = e n A C := Typen der Konstruktoren A SC := {sc 1 :: S 1,..., sc n :: S n } sind Typannahmen zu den sc i Für jeden Kombinator sc j und für alle τ i S j : lässt sich jeder angenommene Typ herleiten, d.h.: A SC A C sc j : τ i, wobei die letzte angewendete Regel jeder Herleitung jeweils die Superkombinatorregel zu sc j ist, dann ist A eine konsistente Typannahme. A ist dann ein Fixpunkt des Verfahrens. Einführung in die funktionale Programmierung, fol
38 Typen für rekursive Superkombinatoren Konsistenz: alle (Grund-)Typen von Superkombinatoren, die in den Annahmen sind, kann man auch aus diesen Annahmen herleiten (Evtl. mehr Typen) Einführung in die funktionale Programmierung, fol
39 Typen für rekursive Superkombinatoren Definition Ein Programm P (eine Mengen von Superkombinatordefinitionen) ist wohlgetypt, wenn es eine konsistente Typannahme zu P gibt. Wenn es eine allgemeinste (größte) konsistente Typannahme gibt dann sind sc i : S i die allgemeinsten Typen der Superkombinatoren. entspricht: größtem Fixpunkt der Annahmen unter Superkombinator-Typ-Herleitung Einführung in die funktionale Programmierung, fol
40 Typisierung eines rekursiven Kombinators Beispiel: repeat x = Cons x (repeat x) Versuch einer Typannahme: A = {repeat : α, Cons : (β [β] [β]), x : τ} Dann ergibt sich: 1. (repeat x) (rechts) ist getypt, deshalb repeat: τ α 2. (Cons x (repeat x)) ist getypt, deshalb [τ] = α und damit (Cons x (repeat x)): [τ]. 3. Das Ergebnis: repeat : τ [τ] Beachte: das geht für alle τ! Aber: Typ-Annahme nicht konsistent. Einführung in die funktionale Programmierung, fol
41 Beispiel: repeat Neue Annahmen A 1 = {repeat : (α [α]), Cons : (β [β] [β])} Konsistenz-Test bzw Typisierung unter A 1 : 1. (repeat x): [τ] 2. (Cons x (repeat x)): [α] und β = α = τ 3. Damit: repeat : τ [τ] für alle τ mit Superkombinatorregel als letzte Regel herleitbar 4. Damit ist A 1 eine konsistente Typannahme. Einführung in die funktionale Programmierung, fol
42 Reduktion und Typen Lemma Sei A konsistente Typannahme für alle Superkombinatoren. Dann gilt: Wenn t t eine Reduktion ist, Dann A t : τ = A t : τ (falls t geschlossen) Bzw. A A V t : τ = A A V t : τ (falls t offen) Begründung: Alle Reduktionsfälle durchgehen: Superkombinator-Reduktion, Beta-Reduktion, Case-Reduktion Einführung in die funktionale Programmierung, fol
43 Reduktion und Typen Begründung des Lemmas: 1. Superkombinator-Reduktion: sc t 1... t n e[t 1 /x 1... t n /x n ] mit sc x 1... x n = e Wir wollen wissen, ob: (A sc t 1... t n ) :: τ = (A e[t 1 /x 1... t n /x n ] :: τ) Einführung in die funktionale Programmierung, fol
44 Reduktion und Typen; Begründung Typregel zu Superkombinatoren und Anwendung: Term sc t 1... t n : Aus A herleitbar: t 1 :: τ 1,..., t n :: τ n, ebenso sc :: τ 1... τ n τ A und (sc t 1... t n ) :: τ. Typannahmen konsistent = sc :: τ 1... τ n τ mittels der Superkombinatorregel herleitbar somit auch für den Rumpf e :: τ unter den Annahmen x 1 :: τ 1,.... Typisierungsregeln beachten nur den Typ der Terme, somit: e[t 1 /x 1... t n /x n ] :: τ ist aus A herleitbar Einführung in die funktionale Programmierung, fol
45 Reduktion und Typen: Begründung 2. ((λx.s)t) s[t/x]. Analog zur Superkombinatorreduktion: Abstraktions und Anwendungsregel-Typisierung passen zur Beta- Reduktion Typen vorher: λx.s :: τ 1 τ 2 t :: σ. ((λx.s) t) :: γ(τ 2 ). wobei γ(τ 1 ) = γ(σ) Typ nachher: s[t/x] ::?? Da der Typcheck-Algorithmus nur auf den Typ der Unterterme achtet und t :: γ(σ) und x :: γ(σ), gilt: s[t/x] : γ(τ 2 ) Einführung in die funktionale Programmierung, fol
46 Reduktion und Typen: Begründung zu case- Reduktion 3. case-reduktion case A (c i t 1... t n(i) )) {(c 1 x 1,1,... x 1,n(1) ) exp 1 ;... (c m x m,1,... x m,n(m) ) exp m } exp i [t 1 /x i,1,..., t n(i) /x i,n(i) ] case-typregel: = : (c i t 1... t n(i) ) und (c i x i,1... x i,n(i) ) haben gleichen Typ. = : t i : τ i und x j,i : τ i exp i : τ, wobei τ der Typ des case- Ausdrucks. Beachte: Aus den Konventionen zu Konstruktoren folgt: aus dem Typ von (c i t 1... t n(i) ) laesst sich der Typ der Terme t i eindeutig bestimmen. = : exp i [t 1 /x i,1,..., t n(i) /x i,n(i) ] : τ Einführung in die funktionale Programmierung, fol
47 Aussagen zu Typcheck Satz wohlgetypte Programme machen keine dynamischen Typfehler Das gilt auch für die (Milner-)Typisierung (wird noch besprochen) Die Milner-Typisierung typisiert aber weniger Programme als die Grundtypenmethode. Einführung in die funktionale Programmierung, fol
48 Direkt Ungetypte Ausdrücke Aussage Für direkt ungetypte Ausdrücke lässt sich kein Typ herleiten. direkt ungetypte Fälle: 1. (case T (c...)...) wobei c kein Konstruktor zu Typ ist. 2. (case T (\x->s)...) 3. (case T (sc t1.. tn)...) und n < ar(sc) 4. ((c...) t) wobei c ein Konstruktor ist. zu 1. Keine Typregel für case anwendbar: Pattern-Typ verschieden von (T...) zu 2. Abstraktion hat Typ τ 1 τ 2 (T...) zu 3. (sc t1.. tn) hat Typ τ 1 τ 2 (T...) zu 4. ((c t 1... t n ) t): Typ von (c t 1...t n ) ist kein -Typ = Die Typregel für Anwendungen ist nicht anwendbar Einführung in die funktionale Programmierung, fol
49 Aussagen zu Typcheck Definition: t dynamisch ungetypt: gdw. t t und t direkt ungetypt Lemma Für dynamisch ungetypte Ausdrücke lässt sich kein Typ herleiten. Folgt aus obigen Lemmas: 1. Typ bleibt erhalten unter Reduktion 2. direkt dynamisch ungetypte t haben keinen Typ. Einführung in die funktionale Programmierung, fol
50 Keine Typfehler: Fortschrittslemma Progress-Lemma; Fortschrittslemma: (zb in KFPTSP) Für jeden geschlossenen, wohlgetypten Ausdruck t gilt: Entweder t ist eine WHNF; oder t hat eine Normalordnungsreduktion Einführung in die funktionale Programmierung, fol
51 Keine Typfehler: Fortschrittslemma Fortschrittslemma gilt nicht in KFPT für die erlaubten Ausdrücke zb (Cons Nil Nil) Nil ist keine WHNF, und hat keine Normalordnungsreduktion Fortschrittslemma gilt nicht für offene Ausdrücke: Einführung in die funktionale Programmierung, fol
Typen und Typcheck. Kapitel Typsysteme, Typüberprüfung
Kapitel 4 Typen und Typcheck 4.1 Typsysteme, Typüberprüfung Wir haben bisher algebraische Datentypen in KFPT, Erweiterungen von KFPT und Haskell kennengelernt, und gesehen, dass es in KFPT dynamische Typfehler
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
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
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,
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
MehrHaskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. 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 Milners
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
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,
MehrÜbersicht. Einführung in die Funktionale Programmierung: Ziele des Kapitels. Typisierung Prof Dr. Manfred Schmidt-Schauß WS 2012/13
Übersicht Einführung in die Funktionale Programmierung: Typisierung Prof Dr. Manfred Schmidt-Schauß WS 2012/13 1 Motivation 2 Typen: Sprechweisen, Notationen und Unifikation 3 Typisierungsverfahren Iteratives
MehrHaskell, Typen und Typberechnung
Kapitel 5 Haskell, Typen und Typberechnung 5.1 Typisierung in Haskell In diesem Kapitel sind die Typisierungsmethoden in Haskell beschrieben, wobei auch kurz auf die Typisierung in anderen Programmiersprachen
MehrÜbersicht. Einführung in die Funktionale Programmierung: Übersicht: Expression und Typen. Ziele des Kapitels
Übersicht Einführung in die Funktionale Programmierung: Typisierung Prof Dr. Manfred Schmidt-Schauß 1 Motivation 2 Typen: Sprechweisen, Notationen und Unifikation 3 Typisierungsverfahren Iteratives Typisierungsverfahren
MehrEinführung in Funktionale Programmierung Typisierung
Einführung in Funktionale Programmierung Typisierung PD Dr. David Sabel WS 2015/16 Stand der Folien: 19. November 2015 Motivation Typen Typisierungsverfahren Ziele des Kapitels Warum typisieren? Typisierungsverfahren
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
MehrHaskell, Typen und Typberechnung
Kapitel 3 Haskell, Typen und Typberechnung 3.1 Typisierung in Haskell In diesem Kapitel sind die Typisierungsmethoden in Haskell beschrieben, wobei auch kurz auf die Typisierung in anderen Programmiersprachen
MehrHaskell, Typen und Typberechnung
Kapitel 5 Haskell, Typen und Typberechnung 5.1 Typisierung in Haskell In diesem Kapitel sind die Typisierungsmethoden in Haskell beschrieben, wobei auch kurz auf die Typisierung in anderen Programmiersprachen
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
MehrSemantik und Analyse von Funktionalen Programmen (SAFP):
Semantik und Analyse von Funktionalen Programmen (SAFP): KFPT mit Sharing und Striktheisanalyse: LR Prof. Dr. Manfred Schmidt-Schauß SAFP; WS 2014/15 Stand der Folien: 5. Februar 2015 LR: Syntax E ::=
MehrLR: Syntax. Semantik und Analyse von Funktionalen Programmen (SAFP): LR: Reduktions-Regeln. LR: Reduktions-Regeln
LR: Syntax Semantik und Analyse von Funktionalen Programmen (SAFP): KFPT mit Sharing und Striktheisanalyse: LR Prof. Dr. Manfred Schmidt-Schauß SAFP; WS 2014/15 E ::= V (c E 1... E ar(c) ) (seq E 1 E 2
MehrPraktikum Funktionale Programmierung Teil 2: Typecheck und Transformation
Praktikum Funktionale Programmierung Teil 2: Typecheck und Transformation Dr. David Sabel Sommersemester 2015 Stand der Folien: SoSe 2015 Übersicht FP-PR Teil 2: Typecheck und Transformation Sommersemester
MehrSemantik und Analyse von Funktionalen Programmen (SAFP):
Semantik und Analyse von Funktionalen Programmen (SAFP): LR: Sharing und Striktheitsanalyse titleslide Prof. Dr. Manfred Schmidt-Schauß SAFP; WS 2017/18 Stand der Folien: 30. Januar 2018 LR: Syntax E ::=
MehrLR: Syntax. Semantik und Analyse von Funktionalen Programmen (SAFP): LR: Reduktions-Regeln. LR: Reduktions-Regeln
LR: Syntax Semantik und Analyse von Funktionalen Programmen (SAFP): LR: Sharing und Striktheitsanalyse titleslide Prof. Dr. Manfred Schmidt-Schauß SAFP; WS 2017/18 E ::= V (c E 1... E ar(c) ) (seq E 1
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
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
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
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
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
MehrFortgeschrittene Funktionale Programmierung
Fortgeschrittene Funktionale Programmierung 12. Vorlesung Janis Voigtländer Universität Bonn Wintersemester 2015/16 Motivation Auf http://www-ps.iai.uni-bonn.de/ft: 1 Motivation 1 Betrachtungen zu Polymorphie
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........................................
MehrLösungen zum Aufgabenblatt 10 Logik und modelltheoretische Semantik
Lösungen zum Aufgabenblatt 10 Logik und modelltheoretische Semantik Universität München, CIS, SS 2013 Hans Leiß Abgabetermin: Do, 4.7.2013, 16 Uhr, in meinem Postfach Aufgabe 10.1 Vereinfache die folgenden
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
MehrProgrammierung und Modellierung
Programmierung und Modellierung Typüberprüfung und Typinferenz Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 5 Typüberprüfung und Typinferenz 1. Typaussagen 2. Typisierungsaxiome
MehrALP I. Funktionale Programmierung
ALP I Funktionale Programmierung Typ-Klassen und SS 2011 Überladung von Datentypen Funktionen sollen oft auf verschiedene Datentypen anwendbar sein, aber nicht auf beliebige Datentypen. Beispiel: Die (+)
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........................................
MehrGrundlagen der Programmierung 2 (1.A)
Grundlagen der Programmierung 2 (1.A) Einführung Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Grundlagen der Programmierung 2 Geplanter Inhalt der ersten Hälfte: Programmieren in Haskell Definitionen;
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
MehrPraktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie
Rev. 2749 1 [28] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 04.11.2014: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2014/15 2 [28] Fahrplan Teil
MehrProgrammieren in Haskell Programmiermethodik
Programmieren in Haskell Programmiermethodik Peter Steffen Universität Bielefeld Technische Fakultät 12.01.2011 1 Programmieren in Haskell Bisherige Themen Was soll wiederholt werden? Bedienung von hugs
MehrPraktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie
16:02:01 2017-01-17 1 [37] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 08.11.2016: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2016/17 PI3 WS 16/17
MehrKapitel 6: Typprüfung
Ludwig Maximilians Universität München Institut für Informatik Lehr- und Forschungseinheit für Datenbanksysteme Skript zur Vorlesung Informatik I Wintersemester 2006 Vorlesung: Prof. Dr. Christian Böhm
MehrFortgeschrittene Funktionale Programmierung
Fortgeschrittene Funktionale Programmierung 13. Vorlesung Janis Voigtländer Universität Bonn Wintersemester 2015/16 Erweiterung um Datentypen Typen: τ := Bool [τ] Terme: t := False True [ ] τ t : t case
MehrEinführung in Haskell
Kapitel 2 Einführung in Haskell Dieses Kapitel enthält eine Einführung in Haskell, eine nicht-strikte funktionale Programmiersprache mit polymorphem Typsystem. Ziel in diesem Kapitel ist: Darstellung der
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
MehrEinführung in Haskell
Kapitel 2 Einführung in Haskell Dieses Kapitel enthält eine Einführung in Haskell, eine nicht-strikte funktionale Programmiersprache mit polymorphem Typsystem. Ziel in diesem Kapitel ist: Darstellung der
MehrGrundlagen der Programmierung 2 (1.A)
Grundlagen der Programmierung 2 (1.A) Einführung Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2018 Grundlagen der Programmierung 2 Geplanter Inhalt der ersten Hälfte: Programmieren in Haskell Definitionen;
MehrAdressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine WWW
Adressen Adressen, Termine Studienleistung Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Büro und Email Raum 216, Robert-Mayer-Str. 11-15 sabel@ki.informatik.uni-frankfurt.de
MehrHaskell. Grundlagen der Programmierung 2. Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte. Prof. Dr. Manfred Schmidt-Schauß
Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte Grundlagen der Programmierung 2 Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 17. April 2013 rekursives
MehrPraktikum Funktionale Programmierung Organisation und Überblick
Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Sommersemester 2013 Stand der Folien: SoSe 2013 Adressen Organisatorisches Software Projekt Adressen, Termine Studienleistung
MehrGrundlagen der Programmierung 2
Grundlagen der Programmierung 2 Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 15. April 2009 Grundlagen der Programmierung 2: Geplanter Inhalt der zweiten Hälfte rekursives
MehrFormale Methoden der Softwaretechnik 1 Vorlesung vom : Grundlage von Isabelle
1 Formale Methoden der Softwaretechnik 1 Vorlesung vom 16.11.09: Grundlage von Isabelle Christoph Lüth, Lutz Schröder Universität Bremen Wintersemester 2009/10 2 Fahrplan Teil I: Grundlagen der Formalen
MehrGrundlagen der Programmierung 2 (1.A)
Grundlagen der Programmierung 2 (1.A) Einführung Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2015 Grundlagen der Programmierung 2 Geplanter Inhalt der ersten Hälfte: Programmieren in Haskell Definitionen;
MehrGenerizität, Abstraktion, Rekursion
Kapitel 17 Generizität, Abstraktion, Rekursion 17.1 Generische Klassen Fragen: was ist der Typ einer generischen Klasse? Kann man zwischen generischen Klassen Vererbung definieren? Kann man zwischen generischen
MehrEinführung in Haskell
Kapitel 2 Einführung in Haskell Dieses Kapitel enthält eine Einführung in Haskell, eine nicht-strikte funktionale Programmiersprache mit polymorphem Typsystem. Ziel in diesem Kapitel ist: Darstellung der
MehrHaskell. Grundlagen der Programmierung 2. Grundlagen der Programmierung 2 (1.A) Bücher, Literatur, URLs. Haskell. Einführung
Grundlagen der Programmierung 2 Grundlagen der Programmierung 2 (1.A) Einführung Prof. Dr Manfred Schmidt-Schauß Sommersemester 2014 Geplanter Inhalt der ersten Hälfte: Programmieren in Definitionen; Rekursion
Mehr9 Algebraische Datentypen
9 Algebraische Datentypen Dieses Kapitel erweitert Haskells Typsystem, das neben Basistypen (Integer, Float, Char, Bool,... ) und Typkonstruktoren ([ ] und ( )) auch algebraische Datentypen kennt. Ganz
MehrProgrammieren in Haskell Das Haskell Typsystem
Programmieren in Haskell Das Haskell Typsystem Peter Steffen Robert Giegerich Universität Bielefeld Technische Fakultät 22.01.2010 1 Programmieren in Haskell Belauscht... Lisa Lista: Ohne Typen keine korrekten
MehrProgrammierung und Modellierung
Programmierung und Modellierung Funktionen höherer Ordnung Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 6 Funktionen höherer Ordnung 1. Funktionen als Parameter und Wert von
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
MehrBeweise und Typen. 9.1 Formalisierung und Beweis
120 9. Beweise und Typen 9 Beweise und Typen Dieses Kapitel ist zweigeteilt. Als erstes wenden wir uns dem Thema zu, wie wir Eigenschaften von funktionalen Programmen beweisen können. Aufwandsabschätzungen
MehrProgrammieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10.
Universität Bielefeld AG Praktische Informatik 10. Dezember 2014 Wiederholung: Schema: f :: [σ] -> τ f [] = e 1 f (a : as) = e 2 where s = f as wobei e 1 und e 2 Ausdrücke vom Typ τ sind und e 2 die Variablen
MehrConcurrent Haskell with Futures. Vorlesung SAFP, WS 2017/18
Concurrent Haskell with Futures Vorlesung SAFP, WS 2017/18 Stand der Folien: 8. Februar 2018 Übersicht Der CHF-Kalkül 1 Der CHF-Kalkül Syntax Typisierung Semantik Gleichheit EFP SAFP Vorlesung SAFP, WS
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
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
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?
MehrLogische und funktionale Programmierung
Logische und funktionale Programmierung Vorlesung 11: Logikprogramme Babeş-Bolyai Universität, Department für Informatik, Cluj-Napoca csacarea@cs.ubbcluj.ro 19. Dezember 2016 1/55 WIEDERHOLUNG: HORN-KLAUSELN
MehrÜbung zur Vorlesung Automatisierte Logik und Programmierung
Übung zur Vorlesung Automatisierte Logik und Programmierung Prof. Chr. Kreitz Universität Potsdam, Theoretische Informatik Wintersemester 008/09 Blatt Abgabetermin: 9.1.08 nach der Übung Aufgabe.1 (Typisierung)
MehrGrundlagen der Theoretischen Informatik Musterlösungen zu ausgewählten Übungsaufgaben
Dieses Dokument soll mehr dazu dienen, Beispiele für die formal korrekt mathematische Bearbeitung von Aufgaben zu liefern, als konkrete Hinweise auf typische Klausuraufgaben zu liefern. Die hier gezeigten
MehrLösungshinweise/-vorschläge zur Altklausur Abschlussklausur 06/07
Lösungshinweise/-vorschläge zur Altklausur Abschlussklausur 06/07 Dies sind die Lösungsvorschläge zu einer Altklausur, deren Aufgabenstellung an die Inhalte der Vorlesung Grundlagen der Programmierung
MehrTyp-Polymorphismus. November 12, 2014
Typ-Polymorphismus Universität Bielefeld AG Praktische Informatik November 12, 2014 Das Haskell Typ-System Wir beginnen mit einer Wiederholung des Bekannten: In allen Programmiersprachen sind Typ-Konzepte
MehrTheoretische Grundlagen der Objektorientierung
Theoretische Grundlagen der Objektorientierung Benedikt Meurer Fachbereich Mathematik Universität Siegen Übersicht 1. Einleitung 2. Funktionale Objekte 3. Typsicherheit 4. Vererbung 5. Fazit Benedikt Meurer
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
MehrFormale Grundlagen der Informatik 1 Kapitel 19. Syntax & Semantik
Formale Grundlagen der Informatik 1 Kapitel 19 & Frank Heitmann heitmann@informatik.uni-hamburg.de 23. Juni 2015 Frank Heitmann heitmann@informatik.uni-hamburg.de 1/25 Motivation Die ist eine Erweiterung
MehrGrundlagen der Programmierung 2
Grundlagen der Programmierung 2 Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 14. April 2011 Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte rekursives
MehrEntscheidungsverfahren mit Anwendungen in der Softwareverifikation
Entscheidungsverfahren mit Anwendungen in der Softwareverifikation VI: SMT, DPLL(T) Carsten Sinz Institut für Theoretische Informatik 21.11.2018 Inhalt Theorien SMT-LIB DPLL(T): Idee Abstraktes DPLL(T)!2
MehrResolutionsalgorithmus
112 Resolutionskalkül Mit dem Begriff Kalkül bezeichnet man eine Menge von syntaktischen Umformungsregeln, mit denen man semantische Eigenschaften der Eingabeformel herleiten kann. Für den Resolutionskalkül:
MehrModellierungsmethoden der Informatik Kapitel 2: Logikkalküle
smethoden der Informatik Kapitel 2: Logikkalküle Prädikatenlogik 1. Stufe Norbert Fuhr Gudrun Fischer 29.11.2005 Organisatorisches Organisatorisches Klausur Termin: 20.2.2006, 13-15 Uhr, Audimax Anmeldung
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" ++
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
MehrKorrektheit und Hoare-Kalkül für Imperative Programme
Korrektheit und Hoare-Kalkül für Imperative Programme Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer SS 06 Ziele Partielle und totale Korrektheit kennen lernen Die Regeln des Hoare-Kalkül
MehrProinformatik Marco Block Dienstag, den 21. Juli 2009
2. Skript vom Dienstag, den 21. Juli 2009 zur Vorlesung Proinformatik Marco Block Dienstag, den 21. Juli 2009 1 Verschiedenes 1.1 let und where Am Anfang der Vorlesung haben wir uns ein paar einfache neue
MehrMehrsortige Strukturen
Was bisher geschah Modellierung von Daten durch Mengen (Individuenbereiche), häufig zusammengesetzt durch Mengenoperationen, Zusammenhängen zwischen Individuen durch Relationen (auch Eigenschaften) Funktionen
MehrKlausur Programmierung WS 2002/03
Klausur Programmierung WS 2002/03 Prof. Dr. Gert Smolka, Dipl. Inf. Thorsten Brunklaus 14. Dezember 2002 Leo Schlau 45 Vor- und Nachname Sitz-Nr. 4711 007 Matrikelnummer Code Bitte öffnen Sie das Klausurheft
MehrWS 2011/2012. Robert Giegerich Dezember 2013
WS 2011/2012 Robert 1 AG Praktische Informatik 11. Dezember 2013 1 robert@techfak.uni-bielefeld.de Vorschau Themen heute: Funktionen höherer Ordnung (Fortsetzung) künstliche Striktheit mehr zu fold für
MehrGrundlagen der Programmierung 2 (Comp-D)
Grundlagen der Programmierung 2 (Comp-D) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 31. Mai 2007 Operationen auf Grammatiken Ziel: Normalisierungen, Vereinfachungen
MehrWas bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):
Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel
MehrVerarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen:
Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen: take 1 0 ( f i l t e r ( fn x => x mod 2=0) nat ) ; val it =
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.......................
MehrPraktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom : Funktionen Höherer Ordnung II und Effizienzaspekte
16:02:08 2017-01-17 1 [34] Praktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom 22.11.2016: Funktionen Höherer Ordnung II und Effizienzaspekte Christoph Lüth Universität Bremen Wintersemester
MehrGrundlagen der Programmierung 2 (1.A)
Grundlagen der Programmierung 2 (1.A) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 20. April 2006 Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte
MehrAufgabe 1 Basiswissen zur Vorlesung (8 Punkte)
Matrikelnummer: 1 Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte) Kreuzen Sie an, ob die folgenden Aussagen richtig oder falsch sind. Bewertung: keine Antwort: 0 Punkte richtige Antwort: +0.5 Punkte falsche
MehrKapitel 16. Cardelli-Typsystem. Wozu Typen und Typsysteme?
Kapitel 16 Cardelli-Typsystem Wozu Typen und Typsysteme? Typen legen die möglichen Werte von Variablen fest Compiler können effizienten Code generieren bestimmte Laufzeitfehler werden garantiert verhindert
Mehr