Programmierung und Modellierung
|
|
- Werner Fischer
- vor 5 Jahren
- Abrufe
Transkript
1 Programmierung und Modellierung Methodisches Programmieren: Ausnahmebehandlung und Strukturen Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009
2 Ausnahmebehandlung und Strukturen 2 Inhalt 9. Ausnahmebehandlung in SML 1. Der vordefinierte Typ exn 2. Ausnahmekonstruktoren 3. Ausnahmen auslösen (oder werfen) 4. Ausnahmen behandeln (oder einfangen) 5. Prinzip der Auswertung von raise- und handle-ausdrücken 10. Module in SML 1. Strukturen 2. Signaturen 3. Struktursichten Stu tusc te und Angleich gec an eine esg Signatur 4. Grundlegende Rechenstrukturen
3 Ausnahmebehandlung und Strukturen Der vordefinierte Typ exn SML enthält einen vordefinierten Typ exn für Ausnahmen (exceptions). Die Werte dieses Typs heißen Ausnahmewerte (exception values) Besonderheit dieses Typs: Ein Programmierer kann dem Typ neue (Wert-)Konstruktoren hinzufügen, die Ausnahmekonstruktoren kt (exception constructors) t genannt werden. (Dies ist für keinen anderen vordefinierten Typ möglich)
4 Ausnahmebehandlung und Strukturen 4 92A 9.2 Ausnahmekonstruktoren kt Ein Ausnahmekonstruktor namens A wird wie folgt deklariert: Konstanter Ausnahmekonstruktor: exception A; Ausnahmekonstruktor mit Parameter vom Typ t: exception A of t; Beispiel exception illegal_expression; l i exception negative_argument of int; Bemerkung Ausnahmen können (mit let) auch lokal deklariert werden. Davon wird aber abgeraten, da dies schwer verständlich ist.
5 Ausnahmebehandlung und Strukturen 5 93A 9.3 Ausnahmen auslösen (oder werfen) Eine Ausnahme A vom Typ exn kann mit folgendem Ausdruck ausgelöst (oder geworfen) werden: raise A Beispiel (Deklaration und Verwendung einer konstanten Ausnahme): - exception negative_integer; exception negative_integer - fun factorial x = if x < 0 then raise negative_integer else if x = 0 then 1 else x * factorial(x - 1); val factorial = fn : int -> int - factorial ~4; uncaught exception negative_integer
6 Ausnahmebehandlung und Strukturen 6 Ausnahmen auslösen (oder werfen) Beispiel (Deklaration und Verwendung einer Ausnahme mit Parameter): - exception negative_argument of int; exception negative_argument of int - fun fac x = if x < 0 then raise negative_argument(x) else if x = 0 then 1 else x * fac(x - 1); val fac = fn : int -> int - fac ~4; uncaught exception negative_argument Der Ausnahmeparameter ~4 wird hier nicht angezeigt, da SML/NJ (wie in anderen Fällen) die Ausgabe verkürzt und damit die volle Struktur nicht sichtbar wird.
7 Ausnahmebehandlung und Strukturen 7 Ausnahmen auslösen (oder werfen) Ausnahmen unterbrechen die normale Auswertung und werden nach außen weitergeleitet: Liefert die Auswertung eines Teilausdruckes T eines zusammengesetzten Ausdrucks B eine Ausnahme A als Ergebnis, so wird diese Ausnahme A als Ergebnis der Auswertung des Gesamtausdrucks B geliefert, es sei denn, A wird von einem Ausnahmebehandler eingefangen. Beispiel: - fun is_even x = (x mod 2 = 0); val is_even = fn : int -> bool - is_even(factorial ~4); uncaught exception negative_integer Aufgrund der applikativen Auswertungsreihenfolge führt die Auswertung von is_even(factorial ~4) zunächst zur Auswertung der Teilausdrucks factorial ~4 und liefert die Ausnahme negative_integer, die als Ergebnis des Gesamtausdrucks zurückgegeben wird.
8 Ausnahmebehandlung und Strukturen Ausnahmen behandeln (oder einfangen) Ein Ausnahmebehandler (engl. exception handler) ist eine Art Funktion, die nur Parameter vom Typ exn haben kann. Er hat im einfachsten Fall die Gestalt handle A => C. Ein Ausdruck exp der Form B handle A => C wird folgendermaßen ausgewertet: Liefert die Auswertung von B (oder eines Teilausdrucks T in B) die Ausnahme A, so wird der Ausnahmebehandler handle A => C wirksam. Dann wird C ausgewertet und der Wert von C als Wert von exp geliefert. (Die Ausnahme A wird also nicht nach oben weitergereicht.) Liefert die Auswertung von B etwas anderes als die Ausnahme A, so wird der Wert von B als Wert von exp geliefert. (Der Ausnahmebehandler handle A => C hat dann keine Wirkung.) Anschaulich kann man sagen, dass ein Teilausdruck eine Ausnahme in Richtung seiner umfassenden Ausdrücke wirft. Die Ausnahme wird von den umfassenden Ausdrücken einfach durchgelassen, bis sie von einem Ausnahmebehandler eingefangen wird.
9 Ausnahmebehandlung und Strukturen 9 Ausnahmen behandeln (oder einfangen) Das Beispiel der Fakultätsfunktion factorial kann wie folgt mit einem Behandler für die Ausnahme negative_integerinteger ergänzt werden: - exception negative_integer; exception negative_integer - fun factorial x = (if x < 0 then raise negative_integer else if x = 0 then 1 else x * factorial(x - 1) ) handle negative_integer => factorial(~x); val factorial = fn : int -> int - factorial ~4; val it = 24 : int Die auftretende Ausnahme negative_integer wird von dem Behandler eingefangen, was zur Auswertung von factorial(~(~4)) führt.
10 Ausnahmebehandlung und Strukturen 10 Ausnahmen behandeln (oder einfangen) Die Ausnahmebehandlung kann auch anders erfolgen: - exception negative_argument of int; exception negative_argument of int - fun fac x = if x < 0 then raise negative_argument(x) else if x = 1 then 1 else x * fac(x - 1); val fac = fn : int -> int - fac ~4 handle negative_argument(y) => fac(~y); val it = 24 : int
11 Ausnahmebehandlung und Strukturen 11 Ausnahmen behandeln (oder einfangen) In beiden Beispielen tritt in den gleichen Fällen eine Ausnahme auf und ihre Behandlung führt auch zu den gleichen Ergebnissen: Im ersten Beispiel wird die Ausnahme im Rumpf der Funktion eingefangen, d.h. im Geltungsbereich des formalen Parameters x der Funktion factorial. Im zweiten Beispiel ist der Behandler außerhalb des Geltungsbereiches des formalen Parameters x der Funktion fac. Der Wert ~4 des aktuellen Parameters des Aufrufes wird über die einstellige Ausnahme negative_argument an den Behandler weitergereicht. Ein Behandler wird i.allg. mittels Pattern Matching definiert: handle <Muster1> => <Ausdruck1> <Muster2> => <Ausdruck2>... <Mustern> => <Ausdruckn>
12 Ausnahmebehandlung und Strukturen Prinzip der Auswertung von raise- und handle-ausdrücken Bei der Auswertung eines zusammengesetzten Ausdrucks werden zunächst die Teilausdrücke ausgewertet. Ist einer der dabei ermittelten Werte ein Ausnahmewert (auch bezeichnet als Ausnahmepaket ), wird die weitere Auswertung der Teilausdrücke abgebrochen und der Ausnahmewert als Wert geliefert. Dabei wird der Ausnahmewert als Ergebnis der Auswertungen sämtlicher umfassender Ausdrücke weitergereicht, bis ein Behandler gefunden wird. Bei der Auswertung eines Ausdrucks <Ausdruck1> handle <Muster> => <Ausdruck2> wird zunächst <Ausdruck1> ausgewertet. Ist der Wert kein Ausnahmewert, wird dieser Wert geliefert. Ist der Wert ein Ausnahmewert ex, erfolgt Pattern Matching zwischen <Muster> und dem Ausnahmewert ex. Bei Erfolg wird <Ausdruck2> ausgewertet und dessen Wert geliefert, bei Misserfolg wird der Ausnahmewert ex geliefert.
13 Ausnahmebehandlung und Strukturen 13 Prinzip der Auswertung von raise- und handle-ausdrücken Beispiel: - exception negative_zahl; - fun f x = if x = 0 then true else if x > 0 then f(x - 1) else raise negative_zahl; val f = fn : int -> bool - fun g true = "wahr" g false = "falsch"; val g = fn : bool -> string - g(f ~3) handle negative_zahl => "Fehler"; val it = "Fehler" : string
14 Ausnahmebehandlung und Strukturen 14 Prinzip der Auswertung von raise- und handle-ausdrücken Die Auswertung des letzten Ausdrucks kann unter Anwendung des Substitutionsmodells wie folgt erläutert werden: (* Zunächst Auswertung von g(f ~3) : *) g(f ~3) handle negative_zahl => "Fehler =[Einsetzen Rumpf f] g(if ~3 = 0 then true else if ~3 > 0 then f(~3-1) else raise negative_zahl ) handle negative_zahl => "Fehler" =[Auswertung ~3 = 0] g(if false then true else if ~3 > 0 then f(~3-1) else raise negative_zahl ) handle negative_zahl => "Fehler =[Auswertung if] g( if ~3 > 0 then f(~3-1) else raise negative_zahl ) handle negative_zahl => "Fehler" =[Auswertung ~3 > 0]
15 Ausnahmebehandlung und Strukturen 15 Prinzip der Auswertung von raise- und handle-ausdrücken g( if false then f(~3-1) else raise negative_zahl ) handle negative_zahl => "Fehler =[Auswertung if] g( raise negative_zahl ) handle negative_zahl => "Fehler =[Auswertung raise] g( negative_zahl ) handle negative_zahl => "Fehler =[Hochreichen Ausnahme] negative_zahl (* = Wert von g(f ~3) *) handle negative_zahl => "Fehler =[Pattern Match erfolgreich] "Fehler"
16 Ausnahmebehandlung und Strukturen 16 Prinzip der Auswertung von raise- und handle-ausdrücken Ausnahmen sind ihrer Natur nach eng an die Auswertungsreihenfolge gekoppelt. Mit SML-Ausnahmen kann man damit z.b. herausfinden, in welcher Reihenfolge Teilausdrücke ausgewertet werden: - exception a; exception a - exception b; exception b - ((raise a) + (raise b)) handle b => 2 a => 1; val it = 1 : int Der linke Teilausdruck wird also zuerst ausgewertet.
17 Ausnahmebehandlung und Strukturen 17 Vordefinierte i Ausnahmen von SML Einige Ausnahmen sind in SML vordefiniert, z.b. die Ausnahmen Match und Bind, die bei Fehlern während des Pattern Matching erhoben werden. Die Standardbibliothek von SML beschreibt die vordefinierten Ausnahmen.
18 Ausnahmebehandlung und Strukturen Module in SML Module ermöglichen die hierarchische Strukturierung größerer Programme. Die Modulbegriffe von SML heißen: Struktur, Signatur, Funktor. In einer SML-Struktur können Werte (Funktionen sind in SML auch Werte), Typen und Ausnahmen deklariert werden. Eine SML-Signatur beschreibt eine Menge von Namen mit den dazu gehörigen Typen. Damit ist eine Signatur eine Art Typ einer Struktur. Die Signatur beschreibt, welche Namen die Struktur deklariert, ohne deren Implementierungen preiszugeben. Ein SML-Funktor ist ein parametrisiertes Modul. Ein SML-Funktor kann als eine Art Funktion angesehen werden, womit Strukturen auf Strukturen abgebildet werden.
19 Ausnahmebehandlung und Strukturen 19 Module in SML Die folgende Ähnlichkeit gilt zu objekt-orientierten Begriffen: Strukturen entsprechen Klassen. Signaturen entsprechen Schnittstellen (Interfaces). Funktoren entsprechen generischen Klassen. Im Folgenden werden SML-Strukturen und SML-Signaturen näher erläutert.
20 Ausnahmebehandlung und Strukturen SML-Strukturen St Eine SML-Struktur Struc besteht aus einer Menge von Deklarationen und hat die Form: structure Struc = struct... end; Beispiel: Struktur zur Definition eines Typs "komplexe Zahlen : structure Complex = struct type t = real * real; val zero = (0.0, 0.0) : t; fun sum ((x1,y1):t, (x2,y2):t) = (x1 + x2, y1 + y2) : t; fun difference((x1,y1):t, (x2,y2):t) = (x1-x2, x2, y1-y2) y2) : t; fun product ((x1,y1):t, (x2,y2):t) = (x1 * x2 - y1 * y2, x1 * y2 + x2 * y1) : t; fun reciprocal((x,y) : t) = let val r = x * x + y * y in (x/r, ~y/r) : t end; fun quotient (z1 : t, z2 : t) = product(z1, reciprocal z2) end;
21 Ausnahmebehandlung und Strukturen 21 SML-StrukturenSt In einer Struktur deklarierte Namen sind außerhalb der Struktur nicht (direkt) sichtbar; z.b.: - reciprocal(1.0, 0.0); Error: unbound variable or constructor: reciprocal Aber jede Struktur bildet einen Namensraum: Ein Name N, der in einer Struktur S deklariert ist, kann außerhalb von S als S.N verwendet werden; z.b.: - Complex.reciprocal(1.0, 0.0); val it = (1.0,0.0) : Complex.t Dient eine Struktur S zur Definition eines Typs t, so wird dieser Typ in der Struktur als t, außerhalb dieser Struktur als S.t bezeichnet: - val i = (0.0, 1.0) : Complex.t; val i = (0.0,1.0) : Complex.t - Complex.product(i, i); val it = (~1.0,0.0) : Complex.t
22 Ausnahmebehandlung und Strukturen SML-Signaturen Si Ein SML-Signatur SIG hat die Form signature SIG = sig type t1; val n1 : typ1; end Die Ausdrücke einer Signatur, die zwischen den reservierten Wörtern sig und end vorkommen, heißen (Signatur-) Spezikationen. Zum Beispiel ist type t eine Spezifikation. Es ist üblich (aber nicht von SML erzwungen), dass die Namen von Strukturen mit einem Großbuchstaben beginnen und die Namen von Signaturen ganz aus Großbuchstaben bestehen. Eine Signatur kann vom SML-System aus einer Strukturdeklaration ermittelt oder vom Programmierer selbst deklariert werden.
23 Ausnahmebehandlung und Strukturen 23 SML-SignaturenSi Beispiel: Signatur für Strukturen, die einen Typ t sowie die grundlegenden arithmetischen Operationen über t implementieren: - signature ARITHMETIC = sig type t val zero : t val sum : t * t -> t val difference : t * t -> t val product : t * t -> t val reciprocal : t -> t val quotient : t * t -> t end; Bemerkung Um den Unterschied zwischen Spezifikationen und Deklarationen zu unterstreichen, t darf das reservierte Wort fun in einer Signatur nicht vorkommen, sondern nur das reservierte Wort val wie etwa: val sum : t * t -> t
24 Ausnahmebehandlung und Strukturen 24 SML-SignaturenSi Die Signatur ARITHMETIC kann in sogenannten Signatur-Constraints verwendet werden, wenn eine Struktur definiert wird, die alle in der Signatur spezifizierten Komponenten deklariert: - structure Rational : ARITHMETIC = struct type t = int * int; val zero = (0, 1) : t; fun sum ((x1,y1):t, (x2,y2):t) = (x1*y2+x2*y1, y1*y2) :t; fun difference((x1,y1):t, e (x2,y2):t) = (x1*y2-x2*y1, y y1*y2) y :t; fun product ((x1,y1):t, (x2,y2):t) = (x1 * x2, y1 * y2) : t; fun reciprocal((x,y) : t) = (y,x) : t; fun quotient (z1 : t, z2 : t) = product(z1, reciprocal z2) end; structure Rational : ARITHMETIC Bemerkung Die Typabkürzungen Rational.tt und Complex.t bezeichnen unterschiedliche Typen, nämlich int * int und real * real, obwohl beide Strukturen dieselbe Signatur ARITHMETIC haben.
25 Ausnahmebehandlung und Strukturen Angleich einer Struktur an eine Signatur: Struktursichten Eine Struktur Struk kann an eine Signatur SIG angeglichen werden, wenn alle Komponenten, die in SIG spezifiziert werden, in Struk deklariert sind. Wenn eine Struktur mehr Komponenten enthält als eine Signatur fordert, können eingeschränkte Sichten (views) auf die Struktur definiert werden. Beispiel Die folgende Signatur spezifiziert nur einen Teil der Namen, die in der Struktur r Complex deklariert sind: - signature RESTRICTED_ARITHMETIC = sig type t val zero : t val sum : t * t -> t val difference : t * t -> t end;
26 Ausnahmebehandlung und Strukturen 26 Angleich einer Struktur an eine Signatur: Struktursichten Mit der Signatur RESTRICTED ARITHMETIC kann eine Einschränkung der Struktur Complex definiert werden, die nur die in RESTRICTED ARITHMETIC vorkommenden Namen zur Verfügung stellt. - structure RestrictedComplex : RESTRICTED_ARITHMETIC = Complex; structure RestrictedComplex : RESTRICTED_ARITHMETIC - val i = (0.0, 1.0) : RestrictedComplex.t; val i = (0.0,1.0) : Complex.t - RestrictedComplex.sum(RestrictedComplex.zero, i i); val it = (0.0,1.0) : Complex.t - RestrictedComplex.product(RestrictedComplex.zero, i); Error: unbound variable or constructor: product in path RestrictedComplex.product - Complex.product(RestrictedComplex.zero, i); val it = (0.0,0.0) : Complex.t In der Deklaration ist : RESTRICTED_ARITHMETIC ein sogenanntes Signatur-Constraint. Mit Signatur-Constraints kann man information hiding erreichen.
27 Ausnahmebehandlung und Strukturen Grundlegende d Rechenstrukturen Im Folgenden behandeln wir die grundlegenden Rechnestrukturen Listen Keller mit Implementierung durch Listen bzw. einen rekursiven Datentyp Mengen (mit Implementierung durch Listen) Darüberhinaus werden Signaturen mit eqtype- und datatype- Spezifikationen eingeführt
28 Ausnahmebehandlung und Strukturen 28 Keller (Stack) Kellerstrukturen sind lineare Strukturen, die nach dem LiFo-Prinzip Pi i (l ( last tin first out ) arbeiten. Signatur signature STACKSIG = sig type a stack exception Stack_empty t val empty_stack: a stack val push: a * a stack -> a stack val pop: a stack -> a stack val top: a stack -> a val is_empty: a stack -> bool end; F.L. Bauer *1924, Diss 1952 LMU Entwickler von Algol 60, Patent auf Kellerprinzip, Vater der dtsch. Informatik
29 Ausnahmebehandlung und Strukturen 29 Keller (Stack): Implementierung durch rekursiven Datentyp structure Stack_By_Rec = struct datatype a stack = empty_stack push of a * a stack exception Stack_empty; fun pop empty_stack = raise Stack_empty pop (push (x, s)) = s; fun top empty_stack = raise Stack_empty top (push (x, s)) = x; fun is_empty empty_stack = true is_empty (push (x, s)) = false; end;
30 Ausnahmebehandlung und Strukturen 30 datatype-spezikationen t ti in SML-Signaturen Si In einer SML-Signatur kann die Spezifikation eines Typs t auch in Form einer datatype-deklaration t erfolgen. In diesem Fall ist nicht nur spezifiziert, dass t ein Typ ist, sondern auch, welche Wertkonstruktoren der Typ t hat. Beispiel: Signatur LIST der Struktur List aus der Standardbibliothek von SML (nächste Folie)
31 Ausnahmebehandlung und Strukturen 31 Signature LIST of Standard d Structure t List signature LIST = sig datatype 'a list = :: of 'a * 'a list nil exception Empty val null : 'a list -> bool val hd : 'a list -> 'a val tl : 'a list -> 'a list val length : 'a list -> int val rev : 'a list -> 'a list... : 'a list * 'a list -> 'a list val filter : ('a -> bool) -> 'a list -> 'a list val all : ('a -> bool) -> 'a list -> bool end
32 Ausnahmebehandlung und Strukturen 32 Implementierung der Kellersignatur durch Listen structure Stack_By_List = struct datatype a stack = Stack of a list; exception Stack_empty; val empty_stack = Stack nil; fun push(x, Stack l) = Stack(x::l); fun pop (Stack nil) = raise Stack_empty pop (Stack(x::l)) = Stack l; fun top (Stack nil) = raise Stack_empty top (Stack(x::l)) = x; fun is_empty (Stack nil) = true is_ empty (Stack(x::l))( = false; end;
33 Ausnahmebehandlung und Strukturen 33 Eqtype-Spezikationen ti in SML-Signaturen Si In einer SML-Signatur kann die Spezifikation eines Typs t mit dem reservierten Wort eqtype statt type eingeführt werden, wenn die Gleichheit über t definiert sein muss. Funktionstypen (also mit dem Typkonstruktor ->) können natürlich nicht mit eqtype deklariert werden, da es keine Gleichheit über Funktionstypen gibt. Beispiel Signatur der (endlichen) Mengen signature SETSIG = sig type ''a set val empty_set: ''a set val insert: ''a -> ''a set -> ''a set val delete: ''a -> ''a set -> ''a set val is_elem: ''a -> ''a set -> bool val union: ''a set -> ''a set -> ''a set val intersect: ''a set -> ''a set -> ''a set val eq_set: ''a set -> ''a set -> bool end
34 Ausnahmebehandlung und Strukturen 34 Implementierung vom Mengen durch ungeordnete Listen structure Set_List: SETSIG = struct fun mem nil e = false (*Hilfsfunktion*) mem (x::l) e = (x=e) orelse (mem l e); datatype t ''a set = Set of ''a list; val empty_set = Set nil; fun is_elem e (Set l) = mem l e; fun insert e (Set l) = Set (e::l); fun union (Set l1) (Set l2) = l2); fun delete e (Set l)= Set( List.filter (fn y => not(e=y)) l ) fun intersect (Set l1) (Set l2) = Set((List.filter (mem l1) l2)); fun eq_ set (Set l1) (Set l2) = (List.all (fn x => mem l1 x) l2) andalso (List.all (fn x => mem l2 x) l1); end; Übung: Implementierung von Mengen durch Suchbäume
35 Ausnahmebehandlung und Strukturen 35 Beispiele i Set_List t - val s0 = Set_ List.insert 3 (Set _ List.insert 5 (Set_List.insert 7 (Set_List.insert 3 Set_List.empty_set))); val s0 = Set [3,5,7,3] : int Set_List.set - val s1 = Set_List.insert 4 (Set_List.insert 3 Set_List.empty_set); set); val s1 = Set [4,3] : int Set_List.set - val s2 = Set_List.union s0 s1; val s2 = Set [3,5,7,3,4,3] : int Set_List.set - val s3 = Set_List.intersect i s0 s1; val s3 = Set [3] : int Set_List.set; - val s4 = Set_List.delete 3 s3; val s4 = Set [] : int Set_ List.set - val s5 = Set_List.eq_set s0 s1; val s5 = false : bool - val s6 = Set_List.insert 3 (Set_List.insert 4 (Set_List.insert insert 3 Set_List.empty_set)); empty set)); val s6 = Set [3,4,3] : int Set_List.set - Set_List.eq_set s6 s1; val s6 =true : bool
36 Ausnahmebehandlung und Strukturen 36 Implementierung vom Mengen durch ungeordnete Listen ohne Wiederholungen structure Set_List: SETSIG = struct fun mem nil e = false (*Hilfsfunktion*) mem (x::l) e = (x=e) orelse (mem l e) datatype a set = Set of a list; val empty_set = Set nil; fun is_elem e (Set l) = mem l e; fun insert e (Set l) = if mem l e then Set l else Set (e::l); fun intersect (Set l1) (Set l2) = Set((filter (mem l1) l2)); fun delete e (Set l)= Set( filter (fn y => not(e=y)) l ) fun union (Set l1) (Set l2) = Set((filter (not o (mem l2)) l2); fun eq_set (Set l1) (Set l2) = (forall (fx x => mem l1 x) l2) andalso (forall (fx x => mem l2 x) l1); end;
37 Ausnahmebehandlung und Strukturen 37 Implementierung vom Mengen durch ungeordnete Listen ohne Wiederholungen Es ändern sich nur die Implementierungen von insert und union: fun insert e (Set l) = if mem l e then Set l else Set (e::l); fun union (Set l1) (Set l2) = Set((filter (not o (mem l2)) l2);
38 Ausnahmebehandlung und Strukturen 38 Zusammenfassung Ausnahmebehandlung Ausnahmen haben in SML den vordefinierten Typ exn und werden mit Hilfe von konstanten oder einstelligen Ausnahmekonstruktoren spezifiziert. Eine Ausnahme A wird ausgelöst durch raise A und kann durch einen Ausdruck der Form handle A1 => C1 An => Cn behandelt werden. Module ermöglichen die hierarchische Strukturierung größerer Programme. Eine SML-Struktur deklariert eine Menge von Werten, Typen und Ausnahmen. Eine SML-Signatur spezifiziert eine Menge von Namen mit den dazu gehörigen Typen, ohne deren Implementierungen preiszugeben. Damit ist eine Signatur eine Art Typ einer Struktur. Beispiele für Signaturen und Strukturen sind die grundlegenden Rechenstrukturen Keller, Liste und Menge.
Verarbeitung 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 =
Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen, Bäume)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen,
Programmierung und Modellierung
Programmierung und Modellierung Benutzerdefinierte Datentypen Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 1. Aufzählungstypen 2. Typen mit zusammengesetzten
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
Programmierung 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
Einfü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
Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 4 (Kapitel 4)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 4 (Kapitel 4) Hinweis: Dieses Übungsblatt enthält
Programmieren in Haskell Abstrakte Datentypen
Programmieren in Haskell Abstrakte Datentypen Peter Steffen Universität Bielefeld Technische Fakultät 09.01.2009 1 Programmieren in Haskell Einführung Man unterscheidet zwei Arten von Datentypen: konkrete
Um nicht immer den Strukturnamen verwenden zu müssen, kann man auch alle Definitionen einer Struktur auf einmal sichtbar machen:
Öffnen von Strukturen Um nicht immer den Strukturnamen verwenden zu müssen, kann man auch alle Definitionen einer Struktur auf einmal sichtbar machen: open P a i r s ; opening Pairs type a Pair = a * a
Berechnungsschemata: Funktion als Parameter abstrahiert Operation im Schema, wird bei Aufruf des Schemas konkretisiert
6. Funktionen als Daten, Übersicht Orthogonales Typsystem: Funktionen sind beliebig mit anderen Typen kombinierbar Notation für Funktionswerte (Lambda-Ausdruck): fn (z,k) => z*k Datenstrukturen mit Funktionen
Beispiele: Funktionsabstraktion (3) Funktionsdeklaration. Funktionsdeklaration (2) Funktionsdeklaration (3) 3. Abstraktion über Funktionsbezeichner:
Beispiele: Funktionsabstraktion (3) Funktionsdeklaration 3. Abstraktion über Funktionsbezeichner: Ausdruck: f (f x) Abstraktion: \ f x -> f (f x) Mit Bezeichnervereinbarung: twice = \ f x -> f (f x) erg
Programmierung und Modellierung
Programmierung und Modellierung Terme, Suchbäume und Pattern Matching Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 7. Binärer Suchbaum 8. Anwendung:
Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 13 (Queues, Binary Search)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 13 (Queues, Binary Search)
Programmieren in Haskell. Abstrakte Datentypen
Programmieren in Haskell Abstrakte Datentypen Einführung Man unterscheidet zwei Arten von Datentypen: konkrete Datentypen: beziehen sich auf eine konkrete Repräsentation in der Sprache. Beispiele: Listen,
2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.
2.5 Listen Listen werden mithilfe von [] und :: konstruiert. Kurzschreibweise: [42; 0; 16] # let mt = [];; val mt : a list = [] # let l1 = 1::mt;; val l1 : int list = [1] # let l = [1;2;3];; val l : int
Geheimnisprinzip: (information hiding principle, Parnas 1972)
2. Abstrakte Datentypen 2.0 Begriffe Geheimnisprinzip: (information hiding principle, Parnas 1972) Zugriffe auf Teile einer Programmeinheit, die für die reguläre Benutzung nicht erforderlich sind, sollten
Übungsblatt 6: Softwareentwicklung I (WS 2006/07)
Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. J.O. Blech Dipl.-Inform. M.J. Gawkowski Dipl.-Inform. N. Rauch Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik Übungsblatt 6:
1. Probeklausur (Lösung) zu Programmierung 1 (WS 07/08)
Fachschaft Informatikstudiengänge Fachrichtung 6.2 Informatik Das Team der Bremser 1. Probeklausur (Lösung) zu Programmierung 1 (WS 07/08) http://fsinfo.cs.uni-sb.de Name Matrikelnummer Bitte öffnen Sie
Kapitel 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
Programmierung WS 2002 / 03: Musterlösung zum 12. Übungsblatt
U N S A R I V E R S A V I E I T A S N I S S Programmierung WS 2002 / 03: Musterlösung zum 12. Übungsblatt Prof. Dr. Gert Smolka, Dipl.-Inform. Thorsten Brunklaus Aufgabe 12.1: Syntaxbäume (10 = 2 + 2 +
Lösungen zum Übungsblatt 3: Softwareentwicklung I (WS 2006/07)
Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. J.O. Blech Dipl.-Inform. M.J. Gawkowski Dipl.-Inform. N. Rauch Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungen zum Übungsblatt
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
ALP I. Funktionale Programmierung
ALP I Funktionale Programmierung Zusammengesetzte Datentypen in Haskell WS 2012/2013 Zusammengesetzte Datentypen Tupel List String Zusammengesetzte Datentypen Tupel-Datentyp Ein Tupel ist eine Ansammlung
Anwendung (2. Versuch:-) Entkopplung der Locks
Gut gemeint aber leider fehlerhaft... Jeder Producer benötigt zwei Locks gleichzeitig, um zu produzieren: 1. dasjenige für den Puffer; 2. dasjenige für einen Semaphor. Musser fürden Semaphor einwait()
SS10 Algorithmen und Datenstrukturen 2. Kapitel Fundamentale Datentypen und Datenstrukturen
SS10 Algorithmen und Datenstrukturen 2. Kapitel Fundamentale Datentypen und Datenstrukturen Martin Dietzfelbinger April 2010 FG KTuEA, TU Ilmenau Algorithmen und Datenstrukturen SS10 Kapitel 2 Datentyp
Allgemeine Hinweise:
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK WS 11/12 Einführung in die Informatik 2 Klausur Prof. Dr. Andrey Rybalchenko, M.Sc. Ruslán Ledesma Garza 11.02.2011 Name Vorname Studiengang Matrikelnummer
2.3 Spezifikation von Abstrakten Datentypen
Abstrakte Datentypen (ADT) 2.3 Spezifikation von Abstrakten Datentypen Sichtbare Schnittstelle: Typbezeichner Signaturen der Operationen Spezifikation der Operationen Abstraktionsbarriere Implementierung
Klausur 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
Inhalt Kapitel 5: Funktionen höherer Ordnung
Inhalt Kapitel 5: 1 Funktionen als Argumente 2 Funktionen als Werte einer Funktion 3 Currying 4 Grundlegende 88 Funktionen als Argumente Funktionen als Argumente: map Anwenden einer Funktion auf alle Einträge
Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 1 (Kapitel 1)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 1 (Kapitel 1) Hinweis: Dieses Übungsblatt enthält
2.2.1 Algebraische Spezifikation (Fortsetzung)
2.2.1 Algebraische Spezifikation (Fortsetzung) Algebraische Spezifikation: Mengen Types Set, Bool, t Signature > creates :: Eq t => Set t > isempty :: Eq t => Set t -> Bool > insert :: Eq t => t -> Set
Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 5 (Kapitel 6)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 5 (Kapitel 6) Hinweis: Dieses Zusatzübungsblatt
Programmierung und Modellierung
Programmierung und Modellierung Zusammenfassung und Ausblick Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt 13. Zusammenfassung und Ausblick 1. Thema der Vorlesung 2. Beispiel rekursive
13 Abstrakte Datentypen
13 Abstrakte Datentypen Bisher: Konkrete Datentypen Menge von Elementen Operationen auf den Elementen (Konstruktoren, Selektoren, Typprädikate) Eigenschaften abgeleitet Jetzt: Abstrakte Datentypen (ADT)
Lö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
Programmierung und Modellierung
Programmierung und Modellierung Termauswertung Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 Einführung 2 Inhalt Wiederholung: Programmiermethodik für rekursive Funktionen Wohlfundierte Relation
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,
5. Januar Universität Bielefeld AG Praktische Informatik. Programmieren in Haskell. Stefan Janssen. Abstrakte Datentypen.
Universität Bielefeld AG Praktische Informatik 5. Januar 2015 Themen-Vorschau Module In der Software-Entwicklung unterscheidet zwei Arten von : konkrete beziehen sich auf eine konkrete Repräsentation in
Kapitel 4: Prozeduren zur Abstraktionsbildung
Ludwig Maximilians Universität München Institut für Informatik Lehr- und Forschungseheit für Datenbanksysteme Skript zur Vorlesung Informatik I Wtersemester 2006 Kapitel 4: Prozeduren zur Abstraktionsbildung
Kapitel 9: Pattern Matching
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
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK WS 11/12 Einführung in die Informatik II Übungsblatt 4 Univ.-Prof. Dr. Andrey Rybalchenko, M.Sc. Ruslán Ledesma Garza 21.11.2011 Dieses Blatt behandelt
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;
5. Typen und Module Datentypen mit Konstruktoren. Discriminated Union mit Konstruktor-Funktionen
5. Typen und Module Datentypen mit Konstruktoren Definition von Datentypen, die verschiedene Wertebereiche zu einem allgemeineren zusammenfassen. Beispiel: Modellierung britischer Adelspersonen King eindeutig,
10 Abstrakte Datentypen
10 Abstrakte Datentypen abstrakte Datentypen generische Implementierung datengesteuerte Programmierung Operationstabelle 10.1 Abstrakte Datentypen Bisher: Konkrete Datentypen Menge von Elementen Operationen
Funktionale Programmierung ALP I. Algebraische Datentypen und Abstrakte Datentypen. SS 2013 Prof. Dr. Margarita Esponda. Prof. Dr.
Funktionale Programmierung AP I Algebraische Datentypen und Abstrakte Datentypen SS 2013 Abstrakt Datentypen Beispiel: Algebraischen Datentypen für Bäume data SBTree = SBTree SBTree AP I: Margarita Esponda,
Algorithmen und Programmierung
Algorithmen und Programmierung Kapitel 8 Abstrakte Datentypen A&P (WS 14/15): 08 Abstrakte Datentypen 1 Überblick Abstrakte Datentypen Signaturen und Algebren Spezifikation von ADTs Umsetzung von ADTs
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
Einführung in die Informatik 1
Einführung in die Informatik 1 Prof. Dr. Harald Räcke, R. Palenta, A. Reuss, S. Schulze Frielinghaus 21.02.2017 Klausur Vorname Nachname Matrikelnummer Unterschrift Füllen Sie die oben angegebenen Felder
B2.1 Abstrakte Datentypen
Algorithmen und Datenstrukturen 21. März 2018 B2. Abstrakte Datentypen Algorithmen und Datenstrukturen B2. Abstrakte Datentypen B2.1 Abstrakte Datentypen Marcel Lüthi and Gabriele Röger B2.2 Multimengen,
3 Einführung in ML. 3.1 Überblick. 3.2 Elementare Datentypen und Funktionen Bezeichner Elementare Datentypen
3 Einführung in ML 3.1 Überblick ML (Abk. für Meta Language) ist eine funktionale Programmiersprache, die Ende der 70er Jahre an der University of Edinburgh entwickelt und 1987 standardisiert wurde. Wir
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
Vollständigkeit. Klassifikation von Operationen
Vollständigkeit Definition Konstruktormenge := mininale Menge von Operationen, mit denen man alle Elemente (=Instanzen) des ADT konstruieren kann. Für Stack ist das die Menge {create, push} Definition
Funktionale Programmierung mit ML
Funktionale Programmierung mit ML Logische und funktionale Programmierung - Universität Potsdam - M. Thomas - Funkt. Programmierung mit ML - X.1 Wichtigsten Eigenschaften von SML funktionale Programmiersprache
How To Understand The Algebraic Structure Of A Program In Python 2.8.2.2 (For Beginners)
Algorithmen und Programmierung Kapitel 8 Abstrakte Datentypen 1 Überblick Abstrakte Datentypen Signaturen und Algebren Spezifikation von ADTs Umsetzung von ADTs 2 Einführung Motivation: Wiederverwendbarkeit
Kapitel 6. Konstruktortypen und Ausnahmen. 6.1 Varianten und Konstruktoren
Kapitel 6 Konstruktortypen und Ausnahmen Wir lernen jetzt, wie man mithilfe von Konstruktoren neue Typen deklariert. Mit Konstruktortypen lassen sich Mengen von geordneten Bäumen beschreiben. Außerdem
Programmierkurs II. Typsynonyme & algebraische Datentypen
Programmierkurs II Typsynonyme & algebraische Datentypen Um Dinge der realen Welt abzubilden, ist es nur in den seltensten Fällen komfortabel alles als Zahlen, Strings oder Listen zu kodieren. Wir benötigen
1 Abstrakte Datentypen
1 Abstrakte Datentypen Spezifiziere nur die Operationen! Verberge Details der Datenstruktur; der Implementierung der Operationen. == Information Hiding 1 Sinn: Verhindern illegaler Zugriffe auf die Datenstruktur;
Kapitel 4: Anweisungen und Kontrollstrukturen
inführung in die Informatik: Programmierung und Softwareentwicklung Wintersemester 2018/19 Kapitel 4: Anweisungen und Kontrollstrukturen Prof. Dr. David Sabel Lehr- und Forschungseinheit für Theoretische
WS 2011/2012. Robert Giegerich. October 30, 2013
WS 2011/2012 Robert AG Praktische Informatik October 30, 2013 Algebraische Datentypen Neue Datentypen werden als algebraische Datentypen eingeführt. Werte des Datentyps sind Formeln, die aus Konstruktoren
Kapitel 4. Kontrollstrukturen
Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen
Programmieren in Java
Programmieren in Java Vorlesung 11: Generic Methods Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2017 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 15 Inhalt
Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute
Wiederholung: Zusammenfassung Felder Algorithmen und Datenstrukturen (für ET/IT) Wintersemester / Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Ein Feld A kann repräsentiert
1. Probeklausur zur Vorlesung Programmierung 1 im Wintersemester 2011/2012
1. Probeklausur zur Vorlesung Programmierung 1 im Wintersemester 2011/2012 Das Team der Tutoren 03. Dezember 2011 Name Matrikelnummer Bitte öffnen Sie das Klausurheft erst dann, wenn Sie dazu aufgefordert
Aufgabe 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
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,
1. Die rekursive Datenstruktur Liste
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel Ein Stack, auch Stapel oder Keller genannt, ist eine Datenstruktur, bei der die Elemente nur an einem Ende der Folge eingefügt bzw. gelöscht
Programmierung im Grossen
1 Letzte Aktualisierung: 16. April 2004 Programmierung im Grossen Bertrand Meyer 2 Vorlesung 4: Abstrakte Daten-Typen Übungen 3 Passe die vorhergehende Spezifikation von Stacks (LIFO, Last-In First-Out
Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 4 (Sortieren und Konstruktoren)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 4 (Sortieren und Konstruktoren)
Workshop 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
Stapel (Stack, Keller)
Stapel (Stack, Keller) Eine wichtige Datenstruktur ist der Stapel. Das Prinzip, dass das zuletzt eingefügte Element als erstes wieder entfernt werden muss, bezeichnet man als LIFO-Prinzip (last-in, first-out).
Software Entwicklung 1
Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Klassenattribute und -methoden Bieniusa Software Entwicklung 1 2/ 23 Beispiel: Klassenattribute I class Uebungsgruppe
16. Ausnahmebehandlung Programmieren / Algorithmen und Datenstrukturen 2
16. Ausnahmebehandlung Programmieren / Algorithmen und Datenstrukturen 2 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt Wintersemester 2012 / 2013 1 Agenda Kontrollfragen Motivation Fehlerbehandlung
Programmieren 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
Grundlagen der Informatik
Grundlagen der Informatik Musterklausur 1. Dynamische Datenstrukturen und objektorientierte Programmierung Zur Verwaltung einer digitalen Fotogalerie sollen Techniken der objektorientierten Programmierung
WS 2011/2012. Georg Sauthoff 1. October 26, 2011
WS 2011/2012 Georg 1 AG Praktische Informatik October 26, 2011 1 gsauthof@techfak.uni-bielefeld.de pea*nuts pea*nuts steht für probieren, erfahren, anwenden - Naturwissenschaften und Technik für Schülerinnen
Programmierung WS18/19 Übungsblatt 9 (Abgabe Freitag, den um 12 Uhr)
Prof. aa Dr. J. Giesl S. Dollase, M. Hark, D. Korzeniewski Aufgabe 2 (Datenstrukturen in Haskell): (2 + 1 + 2 + 2.5 + 3.5 = 11 Punkte) In dieser Aufgabe geht es darum, arithmetische Ausdrücke auszuwerten.
3. Exkurs in weitere Arten der Programmierung
3. Exkurs in weitere Arten der Programmierung Inhalt: Objektorientierte Programmierung in C++ Logische Programmierung in Prolog Peter Sobe Objektorientierte Programmierung in C++ C++ ist eine objektorientierte
Datentypen: integer, char, string, boolean
Agenda für heute, 13. April, 2006 Der Datentyp integer Vergleichsoperatoren, Wahrheitswerte und boolesche Variablen Zusammengesetzte if-then-else-anweisungen Var i: integer; Teilbereich der ganzen Zahlen,
Vorsemesterkurs Informatik
Vorsemesterkurs Informatik Sommersemester 2011 Grundlagen der Programmierung in Haskell SoSe 2011 Stand der Folien: 30. März 2011 Übersicht 1 Ausdrücke und Typen 2 Funktionen 3 Rekursion Vorkurs Informatik
Kapitel 4. Kontrollstrukturen
Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen
Typklassen. Natascha Widder
Typklassen Natascha Widder 19.11.2007 Motivation Typklassen fassen Typen mit ähnlichen Operatoren zusammen ermöglichen überladenen Funktionen Definition Typklassen Deklarationsschema class Name Platzhalter
Reihungen. Martin Wirsing. in Zusammenarbeit mit Michael Barth, Fabian Birzele und Gefei Zhang
Reihungen Martin Wirsing in Zusammenarbeit mit Michael Barth, Fabian Birzele und Gefei Zhang http://www.pst.informatik.uni-muenchen.de/lehre/ws0506/infoeinf/ WS 05/06 2 Ziele Die Datenstruktur der Reihungen
Grundprinzipien der funktionalen Programmierung
Grundprinzipien der funktionalen Programmierung Funktionen haben keine Seiteneffekte Eine Funktion berechnet einen Ausgabewert der nur von den Eingabewerten abhängt: 12 inputs + output 46 34 2 Nicht nur
Funktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda
ALP I SS 2011 Funktionstypen Funktionen haben einen Datentyp, der folgende allgemeine Form hat: functionname :: T 1 -> T 2, wobei T 1, T 2 wiederum beliebige Datentypen sind Beispiel: T 1 T 2 Der Datentyp
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
2. Probeklausur zur Vorlesung Programmierung 1 im Wintersemester 2011/2012
2. Probeklausur zur Vorlesung Programmierung 1 im Wintersemester 2011/2012 Das eam der utoren 04. Februar 2012 Name Matrikelnummer Bitte öffnen Sie das Klausurheft erst dann, wenn Sie dazu aufgefordert
Haskell Seminar Abstrakte Datentypen. Nils Bardenhagen ms2725
Haskell Seminar Abstrakte Datentypen Nils Bardenhagen ms2725 Gliederung Konzept Queue Module Sets Bags Flexible Arrays Fazit Abstrakte Datentypen (ADT) Definition: Eine Zusammenfassung von Operationen,
Programmieren für Wirtschaftswissenschaftler SS 2015
DEPARTMENT WIRTSCHAFTSINFORMATIK FACHBEREICH WIRTSCHAFTSWISSENSCHAFT Programmieren für Wirtschaftswissenschaftler SS 2015 Lucian Ionescu Blockveranstaltung 16.03 27.3.2015 5. Arrays und Listen Agenda Arrays
Praktische 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
HSR Rapperswil 2001 Markus Rigling. Programmieren: Exceptions Auflage
HSR Rapperswil 2001 Markus Rigling Programmieren: Exceptions 1 1. Auflage Inhaltsverzeichnis: 1. Was sind Exceptions?... 3 2. Struktur des Exception Handling... 3 3. Try-Block... 4 4. Exception Handler
Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II) Hinweis: Dieses
Einfü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
Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 12 (Kapitel 13)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 12 (Kapitel 13)
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,
Inhalt Kapitel 11: Formale Syntax und Semantik
Inhalt Kapitel 11: Formale Syntax und Semantik 1 Abstrakte und konkrete Syntax 2 Lexikalische Analyse 3 Formale Sprachen, Grammatiken, BNF 4 Syntaxanalyse konkret 266 Abstrakte und konkrete Syntax Abstrakte
Grundlagen der Programmierung 2 (2.A)
Grundlagen der Programmierung 2 (2.A) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 5. Mai 2011 Listen und Listenfunktionen Listen modellieren Folgen von gleichartigen,