Haskell und Python. pures Programmieren, Auswerten von Ausdrücken rekursives Programmieren, Typsystem. Python: Eine prozedurale Programmiersprache
|
|
- Paulina Engel
- vor 6 Jahren
- Abrufe
Transkript
1 Haskell und Python Haskell: Eine funktionale Programmiersprache funktional, nicht-strikt, hat ein polymorphes und starkes Typsystem, flexible Datenstrukturen, gute Abstraktionseigenschaften, Ziele: pures Programmieren, Auswerten von Ausdrücken rekursives Programmieren, Typsystem Python: Eine prozedurale Programmiersprache prozedural; schwaches, dynamisches Typsystem, flexible Datenstrukturen, Objektorientierung. Ziele: Demonstration imperativer und prozeduraler Konzepte, Vergleich von Konzepten P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 1
2 Interpreter / Compiler Interpreter Compiler (Übersetzer) Ablaufumgebung führt ein Programm aus, (bzw. wertet ein Programm aus), Grundlage: Text des Programms Jeder Programmbefehl wird einzeln eingelesen und dann ausgeführt. erzeugt aus Programm einen ausführbaren Modul. Programmumstellungen, Optimierungen Effekt des Programms muss gleich bleiben. Hier erfolgt die Ausführung des Moduls Es gibt Zwischenformen P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 2
3 Laufzeit / Compilezeit Compilezeit: Laufzeit: Zeitraum der Analyse bzw. Übersetzung des Programms statische Typüberprüfung, Optimierung. Zeitraum der Ausführung des Programms Z.B. dynamische Typüberprüfung, Ein-Ausgabe. P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 3
4 Programmiersprachen: wesentliche Merkmale imperativ Programm ist Folge von Befehlen sukzessive Änderung des Speicherinhalts Ergebnis: letzter Zustand Ein imperatives Programm sagt präzise: was (welche Anweisung), wann (Reihenfolge der Anweisungen) womit (Speicherplatz/Variable) zu geschehen hat. prozedural: Strukturierung in (imperativen) Programmiersprachen Prozedur = Unterprogramm Aufruf mit Argumenten im Programm Ziel: Übersichtlichkeit; Wiederverwendbarkeit P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 4
5 Programmiersprachen: Merkmale (2) funktional: Programm strukturiert in Funktionsdefinitionen Ausdrücke = Anwendung von Funktionen auf Argumente Berechnung = Auswertung von Ausdrücken Varianten von funktionalen Programmiersprachen: nicht-strikt: Argumente werden so spät wie möglich ausgewertet strikt: Argumente werden vor Funktionsaufruf ausgewertet pur: Objekte haben nur einen Wert, keine Mutation nicht-pur: Objekte können verändert werden, Seiteneffekte möglich deklarativ: Idealfall: Spezifikation = deklaratives Programm Betonung auf Logik, weniger algorithmisch Beispiele: logische Programmierung, Prolog P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 5
6 Programmiersprachen: Merkmale (3) objektorientiert: Verwendung in imperativen Programmiersprachen Strukturierung des Programm in Klassen. Ziel: Übersichtlichkeit, Wiederverwendung Ausführung eines Programms: Erzeugung von Objekten Austausch von Nachrichten zwischen Objekten typisiert Alle Programmiersprachen haben Typisierung statische Typisierung: Programmtext dynamische Typisierung: Ausführungszeit des Programms schwache Typisierung: Typfehler zur Laufzeit sind möglich starke Typisierung: Typfehler zur Laufzeit sind nicht möglich P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 6
7 Haskell Wichtige Eigenschaften funktionaler Programmiersprachen Referentielle Transparenz Gleiche Funktion, gleiche Argumente = gleicher Wert Keine Seiteneffekte! Verzögerte Auswertung Nur die für das Resultat notwendigen Unterausdrücke werden (so spät wie möglich) ausgewertet. Polymorphes Typsystem Nur Ausdrücke mit Typ sind erlaubt es gibt Typvariablen. Das Typsystem garantiert: keine dynamischen Typfehler. Automatische Speicherverwaltung Anforderung und Freigabe von Speicher Funktionen sind Datenobjekte mögliche Verwendung: in Datenobjekten, als Argument, als Resultat. P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 7
8 Programmierung in Haskell Interpreter Hugs 98 und GHCi Grundprinzipien: Definition von Funktionen quadrat x = x*x Aufbau von Ausdrücken: Anwendung der Funktion auf Argumente, die wieder Ausdrücke sein können. 3*(quadrat 5) Nur der Wert von Ausdrücken wird bei der Auswertung zurückgegeben. 75 P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 8
9 Umgang mit dem Interpreter Aufruf: ghci (im richtigen Fenster) Online-Report >:h Hilfe >:t Ausdruck druckt den Typ des Ausdrucks >:set +t... Optionen ändern Module im Interpreter verwenden: :m +Char +Numeric... P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 9
10 Einfache Daten und Operatoren ganze Zahlen Typ Int mit n = beliebig lange ganze Zahlen (vom Typ Integer), rationale Zahlen 3%7 (Rational) Gleitkommazahlen 3.456e+10 (Float) Zeichen a Char Datenkonstruktoren True, False; Typ Bool Arithmetische Operatoren: +,,, /, Arithmetische Vergleiche: ==, <=, <... Logische Operatoren: &&,, not P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 10
11 Beispiel Definition eines Polynoms x 2 + y 2 : quadratsumme x y = quadrat x + quadrat y Auswertung:... Main> quadratsumme P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 11
12 Typen in Haskell Typ Konstanten, Funktionen Int 1,2,3,4,... Integer 1,2,3,4,... Float 1.23e45 Double 1.23e45 Integer -> Integer -> Integer (+) Integer -> Integer quadrat Integer -> Integer -> Integer quadratsumme P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 12
13 Typen in Haskell Beispiel Die Ausgabe des Interpreters für die Addition (+) ist komplizierter: (+) :: forall a. (Num a) => a -> a -> a D.h.: Für alle Typen a, die man als numerisch klassifiziert hat, d.h. die in der Typklasse Num sind, hat (+) den Typ a -> a -> a Z.B. gilt: (+)::Integer -> Integer -> Integer (+)::Double -> Double -> Double P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 13
14 (vereinfachte) Haskell-Syntax FunktionsDefinition ::= Funktionsname Parameter = Ausdruck Ausdruck ::= Bezeichner Zahl ( Ausdruck Ausdruck ) ( Ausdruck ) ( Ausdruck BinInfixOp Ausdruck ) Bezeichner ::= Funktionsname Datenkonstruktorname Parameter BinInfixOp BinInfixOp ::= + / Argumente einer Funktion: Anzahl der Argumente: formale Parameter. Stelligkeit der Funktion: (ar(f)) P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 14
15 Beispiel zur Grammatik quadratsumme x y = (quadrat x) + (quadrat y) quadratsumme Funktionsname x,y formale Parameter = gleiches Zeichen wie in Grammatik (quadrat x) + (quadrat y) Ausdruck der Form Ausdruck + Ausdruck + binärer Infix-Operator quadrat x Anwendung: quadrat ist ein Ausdruck und x ist ein Ausdruck P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 15
16 Haskell: Verschiedenes... Prelude: vordefinierte Funktionen, Typen und Datenkonstruktoren Präfix, Infix, Prioritäten ist möglich für Operatoren Konventionen zur Klammerung: s 1 s 2... s n ((... (s 1 s 2 ) s 3...) s n ) Kontextbedingungen in Funktionsdefinitionen: formale Parameter müssen verschiedenen sein; Keine undefinierten Variablen im Rumpf! Weitere Trennzeichen: {, } Semikolon ; Layout-sensibel: bewirkt Klammerung mit {, }. P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 16
17 Fallunterscheidung Syntax: if Ausdruck then Ausdruck else Ausdruck if, then, else sind reservierte (Schlüsselworte) und dürfen nicht als Funktionsnamen bzw. Parameternamen verwendet werden. Der erste Ausdruck ist eine Bedingung. Diese muss Typ Bool haben. Typisierung: if Bool... then typ else typ (if 1 then 1 else 2) ergibt einen Fehler P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 17
18 Bedingungen, Arithmetische Vergleiche Die Infixoperatoren ==, <, >, <=, >=, /= haben den Typ: Integer -> Integer -> Bool Achtung: = ist reserviert für Funktionsdefinitionen, und let Boolesche Ausdrücke sind kombinierbar mit not,, && (nicht, oder, und) Konstanten sind True, False. Eine kompliziertere Bedingung: 3.0 <= x && x < 5.0 P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 18
19 Darstellungen eines Programms Benutzer-Syntax: vom Programmierer benutzt Interne Syntax: Linearisierung ; entzuckerte Version; voll geklammert; alle Operatoren sind Präfix; kein Layout Ableitungsbaum (Herleitungsbaum): Vom Kompiler erzeugt Syntaxbaum: Eindeutige Darstellung des Programms in einem markierten Baum. Hierauf lässt sich eindeutig die Ausführung des Programms definieren. P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 19
20 Syntaxbaum: Beispiele if x <= 0 then 1 else x*(quadrat (x-1)) ifthenelse <= 1 x 0 x app quadrat x 1 P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 20
21 Syntaxbaum: Beispiele Zwei Syntaxbäume zu 1*2: 1 2 app app 2 1 P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 21
22 Aufrufhierarchie und Rekursive Definitionen f, g, f i seien Haskell-definierte Funktionen. f referenziert g direkt, f referenziert g (indirekt), f ist direkt rekursiv, f ist rekursiv, Verschränkte Rekursion: wenn g im Rumpf von f vorkommt. wenn es Funktionen f 1,..., f n gibt, so dass gilt: f referenziert direkt f 1, f 1 referenziert direkt f 2,..., f n referenziert direkt g. wenn f sich selbst direkt referenziert. wenn f sich selbst (indirekt) referenziert. wenn f die Funktion g referenziert und g die Funktion f auch für allgemeinere Fälle P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 22
23 Beispiel: Aufrufhierarchie quadrat x = x*x quadratsumme x y = (quadrat x) + (quadrat y) quadratsumme ruft direkt die Funktion quadrat auf, quadratsumme ruft direkt die (eingebaute) Funktion auf Die Funktion quadratsumme ist somit nicht rekursiv P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 23
24 Beispiel: Fakultät 0! := 1 n! := n (n 1)! n! ist die Anzahl aller Permutationen einer n-elementigen Menge. rekursive Definition: fakultaet:: Integer -> Integer fakultaet x = if x <= 0 then 1 else x*(fakultaet (x-1)) Diese Funktion ist rekursiv, da sie im Rumpf sich selbst wieder aufruft. P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 24
25 Entwurf rekursiver Funktionen Wichtig: zwei Fälle sind zu beachten den Basisfall: den Rekursionsfall: Ergebnis: 0 wenn das Argument x 1 ist. Ergebnis: x*(fakultaet (x-1)), wenn x > 1 ist. Terminierung bei rekursiven Aufrufen : Argumente werden mit jedem rekursiven Aufruf kleiner fakultaet x ruft fakultaet (x-1) auf für x 1. Der Basisfall hat das kleinste Argument Es funktioniert: Main> fakultaet 3 6 Main> fakultaet P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 25
26 Eine falsche Definition fakultaet_nt:: Integer -> Integer fakultaet_nt x = if x == 0 then 1 else x*(fakultaet_nt (x-1)) Diese Funktion terminiert nicht bei negativen Eingaben: fakultaet_nt (-5) ruft fakultaet_nt (-6) auf usw. Für weitere Definitionen von n!, siehe: P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 26
27 Beispiel: Berechnung von Schaltjahren Tropisches Jahr = Tage. Gregorianischen Kalender: Schaltjahre mit 366 Tagen als Korrektur Ein Jahr ist ein Schaltjahr, wenn es durch 4 teilbar ist, aber nicht durch 100. Jahre die durch 400 teilbar sind, sind wieder Schaltjahre. ist_ein_schaltjahr n = if n > 1582 then n mod 400 == 0 (n mod 4 == 0 && n mod 100 /= 0) else error "Jahreszahl vor Einfuehrung des Gregorianischen Kalenders" P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 27
28 Beispiel: nächstes Schaltjahr Ermittlung des nächsten Schaltjahres mit j n: naechstes_schaltjahr n = if (ist_ein_schaltjahr n) then n else naechstes_schaltjahr (n+1) *Main> naechstes_schaltjahr *Main> naechstes_schaltjahr *Main> P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 28
29 Schaltjahre: Orthodox Der orthodoxe Kalender hat bei den durch 100 teilbaren Jahreszahlen eine andere Definition der Schaltjahre: ist_ein_schaltjahr_ortho n = if n > 1582 then (n mod 100 == 0 && (n mod 900 == 200 n mod 900 == 600)) (n mod 4 == 0 && n mod 100 /= 0) else error "Jahreszahl vor Einfuehrung" P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 29
30 Mittlere Jahreslängen mittlere_jahreslaenge::double mittlere_jahreslaenge = mittlere_jahreslaenge_gregor = (mittlere_jahreslaenge_sum ) / mittlere_jahreslaenge_sum von bis summe = if von > bis then summe else if ist_ein_schaltjahr von then mittlere_jahreslaenge_sum (von+1) bis (summe + 366) else mittlere_jahreslaenge_sum (von+1) bis (summe + 365) mittlere_jahreslaenge_ortho::double mittlere_jahreslaenge_ortho = (mittlere_jahreslaenge_ortho_sum ) / mittlere_jahreslaenge_ortho_sum von bis summe = if von > bis then summe else if ist_ein_schaltjahr_ortho von then mittlere_jahreslaenge_ortho_sum (von+1) bis (summe + 366) else mittlere_jahreslaenge_ortho_sum (von+1) bis (summe + 365) P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 30
31 Unterschied Gregorianisch und Orthodox schaltjahr_anders n = if ist_ein_schaltjahr n == ist_ein_schaltjahr_ortho n then schaltjahr_anders (n+1) else n Welches Jahr ist das erste unterschiedliche nach 2004? P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 31
32 Problemanalyse und funktionale Abstraktion Zunächst: Algorithmen auf Zahlen Problemanalyse und Erstellung eines Algorithmus: Zerlegung in (einfachere) Teilprobleme Lösen der Teilprobleme mittels Unterfunktionen Zusammensetzen des Algorithmus Wichtig: was die Funktion leistet, d.h. welche Abbildung wird definiert. sekundär: wie die Funktion realisiert wird. Zentrale Leitideen beim Entwurf sind: Korrektheit Modularität Effizienz P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 32
33 Beispiel: Wurzel aus x mit dem Newtonschen Iterationsverfahren Spezifikation: x := y wobei y 2 = x und y 0 Newton-Verfahren (Heron-Verfahren) zur Näherung von x: Starte mit Schätzwert s für die Wurzel x Iteriere: s 0.5(s + x s ) bis alter und neuer Schätzwert keine große Differenz mehr aufweisen. P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 33
34 Beispiel Wurzelberechnung in Haskell wurzel x = wurzeliter 1.0 x wurzeliter schaetzwert x = if gutgenug schaetzwert x then schaetzwert else wurzeliter (verbessern schaetzwert x) x quadrat x = x*x gutgenug:: Double -> Double -> Bool gutgenug schaetzwert x = abs(((quadrat schaetzwert) - x) / x) < mittelwert:: Double -> Double -> Double mittelwert x y = (x + y) / 2.0 verbessern schaetzwert x = mittelwert schaetzwert (x / schaetzwert) *Main> wurzel *Main> P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 34
35 Semantik von Programmiersprachen Semantik = Bedeutung eines Programms (Programmtextes) ausgehend vom Syntaxbaum des Programms. Methoden der Semantik-Definition: Operationale Semantik Denotationale Semantik Transformations-Semantik logische Semantik P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 35
36 Operationale Semantik Spezifikation von Wirkung und Ablauf: Zustand: Speicherbelegung als Datenstruktur oder... Pro Programmkonstrukt: Angabe des Zustandsübergangs Haskell: Zustand = Ausdruck Übergange: sind Reduktionen, d.h. Änderungen der Ausdrücke. Python: Zustand = Umgebung Übergange: Veränderungen des Speicherinhalts. operationale Semantik = Spezifikation eines Interpreters Vorteil: Prinzipiell immer durchführbar P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 36
37 Zuordnung: Domain D: Denotationale Semantik Programm Funktion Menge der möglichen Funktionen und Objekte Pro Programmkonstrukt: rekursive Angabe der Konstruktion einer Funktion in D. Hürden: Mathematisches Vorwissen notwendig Domainkonstruktion kann schwierig sein P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 37
38 Transformations-Semantik Vorgehen zur Definition der Semantik eines Programms P : Semantik bereits für eine Untermenge der Programme erklärt Transformiere P... P Nehme die Semantik von P. Verwendung: Semantik einer vollen Programmiersprache erklärt durch: Semantik der Kernsprache Transformation: volle Sprache Kernsprache. Semantik von Haskell ist teilweise eine Transformationssemantik Vorteile: Vereinfacht Semantik-Definition Analog zur Arbeitsweise von Compilern P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 38
39 Logische Semantik Beschreibung der Programmkonstrukte und Eigenschaften von Programmen mittels logischer Axiome Herleiten von Programmeigenschaften durch logisches Schließen Z.B. in Prädikatenlogik: Für alle Eingaben n von natürlichen Zahlen liefert quadrat n das Ergebnis n 2. Als Formel: n : quadrat(n) = n 2 P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 39
40 Auswertung von einfachen Haskell-Programmen: Ziel: operationale Semantik von Haskell Vorteile einer operationalen Semantik: formal saubere Definition der Auswertung auch für Funktionen höherer Ordnung Unabhängigkeit von Compilern Unabhängigkeit vom Rechnertyp (Portabilität) P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 40
41 Einfache Haskell-Programme Definition: Basiswert ist entweder eine Zahl, Zeichen oder True,False. Einfache Haskell-Programme: dürfen benutzen: Basiswerte und entsprechende vordefinierte Operatoren Funktionsdefinitionen if-then-else Anwendung von Funktionen auf Argumente P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 41
42 Einfache Haskell-Programme (2) Definition: Ein (einfaches) Haskell-Programm besteht aus: Menge von Funktionsdefinitionen; entsprechend obiger Beschränkungen Ausdruck (main) vom Typ eines Basiswertes. Wert des Programms = Wert von main Beispiel quadrat x = x * x kubik x = x * x * x w = 2 main = if w >= 0 then quadrat w else kubik w P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 42
43 Berechnung und Auswertung Prinzip der Berechnung für einfache Haskell-Programme Auswertung = Folge von Transformationen von main bis ein Basiswert erreicht ist main t 1 t 2... t n... Es gibt drei Fälle: 1. Die Folge endet mit einem Basiswert 2. Die Folge endet, aber nicht mit einem Basiswert 3. Die Folge endet nicht Bei 2. und 3.: Wert undefiniert. P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 43
44 Berechnung und Auswertung: Notation P [t] Bedeutung: P [ ] ist ein Ausdruck P mit Platzhalter [ ] P [t] bedeutet den Ausdruck P mit t anstelle des Platzhalters Beispiel: P [ ] if s then [.] else 2, P [t] if s then t else 2. P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 44
45 Auswertung Einfache Haskell-Programm haben drei verschiedene Arten von Auswertungsschritten 1. Definitionseinsetzung (δ-reduktion) 2. Arithmetische Auswertung 3. Auswertung von Fallunterscheidungen P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 45
46 Definitionseinsetzung (δ-reduktion) Auswerten einer Anwendung von f auf n Argumente: P [(f t 1... t n )] P [(Rumpf f [t 1 /x 1,... t n /x n ])] Bedingungen: Die Definition von f ist: f x 1... x n = Rumpf f P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 46
47 Definitionseinsetzung (Rumpf f [t 1 /x 1,... t n /x n ]) entsteht durch (paralleles bzw. unabhängiges) Ersetzen von x i durch t i. t i kann ein Ausdruck sein; es muss kein Basiswert sein! P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 47
48 Einschub: Metanotation In Lehrbüchern, Skripten, Artikeln über Programmiersprachen, Logik usw.: Mischung von konkreter Syntax und Meta-Notation. Beispiele konkrete Syntax: Meta-Notation: die Funktion fakultaet... Sei f eine Funktion in Programm..., P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 48
49 Einschub: Metanotation: Beispiel Notation bei Definitionseinsetzungsregel : (Rumpf f [t 1 /x 1,... t n /x n ]) Hierbei sind alles Metavariablen: f Rumpf f t 1,..., t n x 1,..., x n steht für eine Funktion steht für den Rumpf dieser Funktion stehen für Ausdrücke: die Argumente stehen für die formalen Parameter der Funktion P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 49
50 Einschub: Metanotation: Beispiel gutgenug schaetzwert x = abs(((quadrat schaetzwert) - x)) / x < Bei Definitionseinsetzung für gutgenug : x 1 steht für den formalen Parameter schaetzwert und x 2 steht für den formalen Parameter x t 1 steht für den formalen Parameter P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 50
51 Arithmetische Auswertungen P [v op w] P [r] wenn: v, w arithmetische Basiswerte, op ein zweistelliger arithmetischer Operator, r Resultat von v op w P [op v] P [r] wenn: v arithmetischer Basiswert, op einstelliger arithmetischer Operator, r Resultat von op v Beachte: Wenn s op t ausgewertet werden soll, dann zuerst die Ausdrücke s, t auswerten. P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 51
52 Boolesche Auswertungen P [v op w] oder P [op w] wobei op einer der Operatoren &&,, not sein kann. Wird als Anwendung des Operators auf Argumente ausgewertet. Definitionen, in der Wirkung äquivalent zu den vordefinierten: x && y = if x then y else False x y = if x then True else y not x = if x then False else True P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 52
53 Auswertung der Fallunterscheidung Fallunterscheidung (if-reduktion) P [(if True then e 1 else e 2 )] P [e 1 ] P [(if False then e 1 else e 2 )] P [e 2 ] Beachte Diese zwei Regeln können nur angewendet werden, wenn der Bedingungsausdruck zu True oder False ausgewertet ist. P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 53
54 Transformationen, Reduktionen Wir nennen eine Transformation auch Reduktion und eine Folge von Programmtransformationen auch Reduktionsfolge (oder Auswertung). Beachte: Reduktionen / Transformationen sind zunächst überall im Ausdruck erlaubt. Erst eine Auswertungs-Strategie macht die Auswertung eindeutig. P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 54
55 Beispiel x && y = if x then y x y = if x then True bot = bot else False else y Auswertungen unter der Annahme der obigen Definition True && True if True then True else False True True && False if True then False else False False True True if True then True else True True True False if True then True else False True True && bot if True then bot else False bot bot... True bot if True then True else bot True P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 55
56 Beispiel: Programm: main = quadrat 5 quadrat x = x*x Auswertung als Folge von Transformationen: main quadrat 5 5 * 5 25 P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 56
57 Beispiel: Auswertung Programm: wurzel x = if not (x > x) then error "wurzel: not a number" else if x >= 0 then wurzeliter 1.0 x else error "wurzel: Eingabe negativ" wurzeliter schaetzwert x = if gutgenug schaetzwert x then schaetzwert else wurzeliter (verbessern schaetzwert x) x quadrat x = x*x gutgenug schaetzwert x = abs(((quadrat schaetzwert) - x) / x) < mittelwert x y = (x + y) / 2.0 verbessern schaetzwert x = mittelwert schaetzwert (x / schaetzwert) P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 57
58 Beispiel Auswertung Folge von Transformationen: wurzel 2.0 (Definitionseinsetzung) if not ( > 2.0) then error "wurzel: not a number" else if 2.0 >= 0 then wurzeliter else error "wurzel: Eingabe negativ" P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 58
59 Beispiel: Auswertung (2) (Auswertung arithmetischer Ausdruck) if not ( 2.1 > 2.0) then error "wurzel: not a number" else if 2.0 >= 0 then wurzeliter else error "wurzel: Eingabe negativ" (Auswertung arithmetischer Ausdruck) if not True then error "wurzel: not a number" else if 2.0 >= 0 then wurzeliter else error "wurzel: Eingabe negativ" (Auswertung Boolescher Ausdruck) if False then error "wurzel: not a number" else if 2.0 >= 0 then wurzeliter else error "wurzel: Eingabe negativ" P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3rd November2004) Seite 59
60 Beispiel: Auswertung (3) (if-auswertung) if 2.0 >= 0 then wurzeliter else error "wurzel: Eingabe negativ" if True then wurzeliter else error "wurzel: Eingabe negativ" wurzeliter if gutgenug then 1.0 else wurzeliter (verbessern ) 2.0 P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3rd November2004) Seite 60
61 Beispiel: Auswertung (4) (Definitionseinsetzung gutgenug ) if abs((( quadrat 1.0 ) - 2.0)) / 2.0 < then 1.0 else wurzeliter (verbessern ) 2.0 if abs(((1.0 * 1.0 ) - 2.0)) / 2.0 < then 1.0 else wurzeliter (verbessern ) 2.0 if abs(( )) / 2.0 < then 1.0 else wurzeliter (verbessern ) 2.0 if abs(-1.0) / 2.0 < then 1.0 else wurzeliter (verbessern ) 2.0 P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3rd November2004) Seite 61
62 Beispiel: Auswertung (5) if 1.0 / 2.0 < then 1.0 else wurzeliter (verbessern ) 2.0 if 0.5 < then 1.0 else wurzeliter (verbessern ) 2.0 if False then 1.0 else wurzeliter (verbessern ) 2.0 wurzeliter (verbessern ) 2.0 if gutgenug (verbessern ) 2.0 then (verbessern ) else wurzeliter (verbessern (verbessern ) 2.0) P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3rd November2004) Seite 62
63 Transformationsmöglichkeiten 3 Auswertungen für quadrat (4+5) : 1. quadrat(4 + 5) (4 + 5) (4 + 5) 9 (4 + 5) quadrat(4 + 5) (4 + 5) (4 + 5) (4 + 5) quadrat(4 + 5) (quadrat 9) Beobachtungen: Ergebnis ist gleich Anzahl der Reduktionen verschieden P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 63
64 Satz von Church und Rosser Satz (Church-Rosser I) Sei P ein Programm, R 1, R 2 zwei verschiedene Reduktionsfolgen für main mit jeweiligen Resultat-Basiswerten e 1 bzw. e 2 dann sind diese Basiswerte gleich, d.h. e 1 = e 2 P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 64
65 Werte von Programmen Definition: Sei P ein Programm und main von numerischem oder Booleschem Typ. Der Wert des Programms P ist: e undefiniert ( ) wenn es eine terminierende Reduktionsfolge, ausgehend von main gibt, die mit dem Basiswert e endet, wenn es keine mit einem Basiswert terminierende Reduktionsfolge ausgehend von main gibt. Damit gilt: Ein einfaches Haskell-Programm hat einen eindeutig definierten Wert unabhängig von der Art der Auswertung P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 65
66 Reduktionsstrategien Zwei wichtige Reduktionsstrategien Applikative Reihenfolge: Argumentauswertung vor δ-reduktion Normale Reihenfolge: δ-reduktion vor Argumentauswertung P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 66
67 Beschreibung: applikative Reihenfolge werte t 0 applikativ aus! Fälle: t 0 ist Basiswert. fertig. t 0 s t, Wenn s kein Funktionsname und keine Anwendung, dann applikativ s t 0 f t 1... t n. Wenn ar(f) n, dann applikativ t i, 1 i ar(f) von links nach rechts. Wenn ar(f) n und alle t i Basiswerte, dann δ-reduktion. Wenn n < ar(f), dann fertig: keine Reduktion. t 0 if b then e 1 else e 2. Wenn b Basiswert, dann if-reduktion Wenn b kein Basiswert, dann applikativ b P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 67
68 Beschreibung: normale Reihenfolge werte t 0 in normaler Reihenfolge aus. Fälle: t 0 ist Basiswert. fertig. t 0 s t, Wenn s kein Funktionsname und keine Anwendung. Dann normale R. auf s t 0 f t 1... t n und f keine eingebaute Funktion, Wenn ar(f) n, dann δ-reduktion auf f t 1... t ar(f). Wenn ar(f) > n: keine Reduktion. t 0 f t 1... t n und f ist eingebaute Funktion Wenn ar(f) n und Argumente von f keine Basiswerte, dann normale R. auf ar(f) Argumente von links nach rechts. Wenn ar(f) n, und ar(f) Argumente von f sind Basiswerte, dann eingebaute Funktion aufrufen. Wenn ar(f) > n: keine Reduktion. t 0 if b then e 1 else e 2. Wenn b Basiswert, dann if-reduktion Wenn b kein Basiswert, dann normale R. auf b P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 68
69 Beispiel für Reduktionen 3 Auswertungen für quadrat (4+5) : 1. quadrat(4 + 5) (4 + 5) (4 + 5) 9 (4 + 5) normale Reihenfolge der Auswertung 2. quadrat(4 + 5) (4 + 5) (4 + 5) (4 + 5) quadrat(4 + 5) (quadrat 9) applikative Reihenfolge der Auswertung P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 69
70 Prozeduraufrufe in anderen Programmiersprachen Prozeduraufruf mit Wertübergabe: call-by-value Es wird nur der Wert übergeben ähnlich zur applikative Reihenfolge Prozeduraufruf mit Namensübergabe: call-by-name Es wird nur der Name der Variablen übergeben hat entfernte Ähnlichkeit zur normalen Reihenfolge P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 70
71 Satz 2 von Church und Rosser SATZ (Church-Rosser-2) Sei P ein einfaches Haskell-Programm. Wenn es irgendeine Reduktionsfolge für main gibt, die mit einem Basiswert e terminiert, dann terminiert auch die normale Reihenfolge der Auswertung von main und liefert als Basiswert (Resultat) genau e. Die normale Reihenfolge ist ausreichend zur Auswertung Haskell benutzt normale Reihenfolge der Auswertung P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 71
72 Berechnungsvorschrift Eine Menge von Funktionsdefinitionen, ein Ausdruck und eine ausführbare Auswertungsstrategie ergibt eine Berechnungsvorschrift. Church-Rosser-1 und Church-Rosser-2 = Funktionsdefinitionen + Ausdruck = Algorithmus P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 72
73 Gegenbeispiel zu C.R. 2 bei applikativ Church-Rosser-2 gilt nicht für die applikative Reihenfolge: nt x = nt x proj x y = x main = proj 0 (nt 1) applikative Reihenfolge für main terminiert nicht: (nt 1) (nt 1) (nt 1) Deshalb: proj 0 (nt 1) proj 0 (nt 1) Die normale Reihenfolge liefert sofort 0. P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 73
74 Optimale Anzahl der Reduktionen Definition verzögerte Reihenfolge der Auswertung (lazy reduction): normale Reihenfolge gerichteter Graph statt Text Vermeidung von unnötiger Doppelauswertung durch gemeinsame Unterausdrücke (Sharing) Church-Rosser-2 gilt auch für verzögerte Reduktion! Falls ein Basiswert berechnet wird, gilt für #Reduktionsschritte: # verzögerte R # applikative R # normale R Es gilt: verzögerte Reduktion hat optimale Anzahl von Reduktionen Haskell verwendet verzögerte Reduktion P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 74
75 Beispiel 1. 4 Reduktionen: (normale R.) quadrat(4 + 5) (4 + 5) (4 + 5) 9 (4 + 5) Reduktionen: quadrat(4 + 5) (4 + 5) (4 + 5) (4 + 5) Reduktionen (applikative R.) quadrat(4 + 5) (quadrat 9) Reduktionen (verzögerte R.) quadrat(4 + 5) (4 + 5) (1) (4 + 5) (1) P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 75
76 Verzögerte Auswertung: komplexeres Beispiel fakultaet x = if x <= 0 then 1 else x*(fakultaet (x-1)) Die Reduktionsschritte: fakultaet 3 if 3 <= 0 then 1 else 3*(fakultaet (3-1)) if False then 1 else 3*(fakultaet (3-1)) 3* (fakultaet (3-1)) 3*(if (3-1) <= 0 then 1 else (3-1) *(fakultaet ( (3-1) -1))) P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 76
77 Beispiel... 3*(if 2 <= 0 then 1 else 2*(fakultaet (2-1))) 3* (if False then 1 else 2*(fakultaet (2-1))) 3*(2* (fakultaet (2-1)) ) 3*(2*(if (2-1) <= 0 then 1 else (2-1) *(fakultaet ( (2-1) -1)))) 3*(2*(if 1 <= 0 then 1 else 1*(fakultaet (1-1)))) 3*(2* (if False then 1 else 1*(fakultaet (1-1))) ) 3*(2*(1* (fakultaet (1-1)))) P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 77
78 Beispiel... 3*(2*(1*(if (1-1)<= 0 then 1 else(1-1)*(fakultaet ((1-1)-1))))) 3*(2*(1*(if 0 <= 0 then 1 else 0*(fakultaet (0-1))))) 3*(2*(1* (if True then 1 else 0*(fakultaet (0-1))))) 3*(2* (1*1)) 3*(2*1) 3*2 6 P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 78
79 Ein weiterer Vorteil der verzögerten Reduktion verzögerte Reduktionenen zur Compile-Zeit sind korrekte Programmtransformationen d.h. die operationale Semantik bleibt erhalten Das ist falsch bei applikativer Reihenfolge P raktische Informatik 1, W S 2004/05, F olien Haskell 1, (3. November2004) Seite 79
Grundlagen der Programmierung 2 (1.B)
Grundlagen der Programmierung 2 (1.B) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 20. April 2011 Aufrufhierarchie und Rekursive Definitionen f, g, f i seien Haskell-definierte
MehrGrundlagen der Programmierung 2 (1.B)
Grundlagen der Programmierung 2 (1.B) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 27. April 2012 Beispiel: Aufrufhierarchie quadrat x = x*x quadratsumme x y = (quadrat
MehrWieviel Vorfahren? Grundlagen der Programmierung 2. Beispiel: Aufrufhierarchie. Aufrufhierarchie und Rekursive Definitionen. Haskell: Auswertung
Wieviel Vorfahren? Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017..................... Oma-M Opa-M Oma-V Opa-V Mutter ich Vater Aufgabe: Wieviele
MehrProgrammiersprachen: rekursives Programmieren in Haskell
Kapitel 1 Programmiersprachen: rekursives Programmieren in Haskell Das generelle Ziel dieses Teils der Vorlesung ist das Verständnis von Programmierparadigmen, insbesondere rekursive Programmierung, funktionaler
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
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
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
MehrProgrammiersprachen: rekursives Programmieren in Haskell
Kapitel 1 Programmiersprachen: rekursives Programmieren in Haskell Das generelle Ziel dieses Teils der Vorlesung ist das Verständnis von Programmierparadigmen, insbesondere rekursive Programmierung, funktionaler
MehrALP I Einführung in Haskell
ALP I Einführung in Haskell WS 2012/2013 Was ist Haskell? Haskell ist eine rein Funktionale Programmiersprache mit einer nach Bedarf Auswertung-Strategie oder "Lazy Evaluation". Was bedeutet rein funktional?
MehrBasiskonstrukte von Haskell
Basiskonstrukte von Haskell PD Dr. David Sabel Goethe-Universität Frankfurt am Main 29. September 2015 Basistypen und Operationen Ganzzahlen: Int = Ganzzahlen beschränkter Länge Integer = Ganzzahlen beliebiger
MehrÜbersicht. Einführung in die Funktionale Programmierung: Einleitung & Motivation. Klassifizierung von Programmiersprachen (1)
Stand der Folien: 18. Oktober 2010 Motivation Funktionale Programmiersprachen Haskell Übersicht Einführung in die Funktionale Programmierung: Einleitung & Motivation Dr. David Sabel 1 Motivation Übersicht
MehrEinführung in die Funktionale Programmierung: Einleitung & Motivation
Einführung in die Funktionale Programmierung: Einleitung & Motivation Prof Dr. Manfred Schmidt-Schauß WS 2011/12 Stand der Folien: 25. Oktober 2011 Motivation Funktionale Programmiersprachen Haskell Übersicht
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):
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,
Mehr1 Funktionale vs. Imperative Programmierung
1 Funktionale vs. Imperative Programmierung 1.1 Einführung Programme einer funktionalen Programmiersprache (functional programming language, FPL) bestehen ausschließlich aus Funktionsdefinitionen und Funktionsaufrufen.
MehrAlgorithmen & Programmierung. Ausdrücke & Operatoren (1)
Algorithmen & Programmierung Ausdrücke & Operatoren (1) Ausdrücke Was ist ein Ausdruck? Literal Variable Funktionsaufruf Ausdruck, der durch Anwendung eines einstelligen (unären) Operators auf einen Ausdruck
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
MehrEinführung in die Informatik I (autip)
Einführung in die Informatik I (autip) Dr. Stefan Lewandowski Fakultät 5: Informatik, Elektrotechnik und Informationstechnik Abteilung Formale Konzepte Universität Stuttgart 24. Oktober 2007 Was Sie bis
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........................................
MehrWerkzeuge zur Programmentwicklung
Werkzeuge zur Programmentwicklung B-15 Bibliothek Modulschnittstellen vorübersetzte Module Eingabe Editor Übersetzer (Compiler) Binder (Linker) Rechner mit Systemsoftware Quellmodul (Source) Zielmodul
MehrProgrammierung in Python
Programmierung in Python imperativ, objekt-orientiert dynamische Typisierung rapid prototyping Script-Sprache Funktionales und rekursives Programmieren P raktische Informatik 1, W S 2004/05, F olien P
MehrFunktionen in Matlab. Nutzerdefinierte Funktionen können in.m-datei gespeichert werden
Funktionen in Matlab Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung
MehrLR-Parser, Shift-Reduce-Verfahren
LR-Parser, Shift-Reduce-Verfahren Bottom-Up-Syntaxanalyse LR-Parser L: Eingabe von links nach rechts; R: Rechtsherleitung Shift-Reduce-Verfahren Beachte: Kein Backtracking nicht auf jede Grammatik anwendbar
MehrCrashkurs Haskell Mentoring WiSe 2016/17. Anja Wolffgramm Freie Universität Berlin
Crashkurs Haskell Mentoring WiSe 2016/17 Anja Wolffgramm Freie Universität Berlin 02/11/2016 , Inhalt Kommandozeile Haskell installieren & starten Ein 1. Haskell-Programm Funktionsdefinition Primitive
MehrOperationen auf Grammatiken
Operationen auf Grammatiken Ziel: Normalisierungen, Vereinfachungen, Elimination bestimmter Konstrukte Erzeugen eines Parsers Transformation G 1 G 2 mit L(G 1 ) = L(G 2 ) I.a. Parsebaum 1 (w) Parsebaum
MehrPraktische Informatik 3: Funktionale Programmierung Vorlesung 2 vom : Funktionen und Datentypen
Rev. 1843 1 [35] Praktische Informatik 3: Funktionale Programmierung Vorlesung 2 vom 23.10.2012: Funktionen und Datentypen Christoph Lüth Universität Bremen Wintersemester 2012/13 2 [35] Fahrplan Teil
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
MehrEinführung in C. EDV1-04C-Einführung 1
Einführung in C 1 Helmut Erlenkötter C Programmieren von Anfang an Rowohlt Taschenbuch Verlag ISBN 3-4993 499-60074-9 19,90 DM http://www.erlenkoetter.de Walter Herglotz Das Einsteigerseminar C++ bhv Verlags
MehrKonzepte der Programmiersprachen
Konzepte der Programmiersprachen Lehrstuhl Prof. Plödereder Eduard Wiebe Institut für Softwaretechnologie Abteilung Programmiersprachen und Übersetzerbau Sommersemester 2007 Programm-Ausführung Programmiersprachen
MehrLö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
MehrÜbungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002
1. Stellen Sie die schrittweise Verbesserung eines Compilers durch das Bootstrap- Verfahren mit Hilfe von T-Diagrammen dar. Gegeben ist ein auf der Maschine M lauffähiger Compiler C 1, der in S geschrieben
Mehr4.1 Bäume, Datenstrukturen und Algorithmen. Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als
Kapitel 4 Bäume 4.1 Bäume, Datenstrukturen und Algorithmen Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als eine Menge von Knoten und eine Menge von zugehörigen
MehrTag 3. Funktionen. Num erfüllen, haben wir... ja, was nun eigentlich? Bei
Tag 3 Funktionen Heute werden wir den wichtigsten Typ (oder die wichtigste Klasse von Typen) in Haskell überhaupt genau unter die Lupe nehmen: Funktionen, die wir ansatzweise schon am letzten Tag kennengelernt
MehrProjekt 3 Variablen und Operatoren
Projekt 3 Variablen und Operatoren Praktisch jedes Programm verarbeitet Daten. Um mit Daten programmieren zu können, muss es Möglichkeiten geben, die Daten in einem Programm zu verwalten und zu manipulieren.
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
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;
MehrFunktionale Programmierung
Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 2 Teil II Typen mit Werten und Ausdruck, sogar listenweise 3 Haskell Programme Programm Module ein
MehrEinführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable
1 Kapitel 3 Grunddatentypen, Ausdrücke und Variable 2 Eine Datenstruktur besteht aus Grunddatentypen in Java einer Menge von Daten (Werten) charakteristischen Operationen Datenstrukturen werden mit einem
MehrProgrammiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 7. Funktionen Einleitung Nach dem Prinzip Divide and Conquer bietet es sich an, größere Aufgaben in kleinere Teile zu unterteilen. Anweisungsblöcke,
MehrÜbung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil
MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)
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
MehrVorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 5A. Lösung zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler)
Fachbereich Informatik und Mathematik Institut für Informatik Vorsemesterkurs Informatik Sommersemester 2017 Aufgabenblatt Nr. 5A zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler) Laden Sie von der
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
MehrFunktionale Programmiersprachen
Funktionale Programmiersprachen An den Beispielen Haskell und Erlang Übersicht Programmiersprachen λ-kalkül Syntax, Definitionen Besonderheiten von funktionalen Programmiersprache, bzw. Haskell Objektorientierte
MehrÜbersicht. Einführung in die Funktionale Programmierung: Einleitung & Motivation. Klassifizierung von Programmiersprachen (1)
Motivation Funktionale Programmiersprachen Haskell Übersicht Einführung in die Funktionale Programmierung: Einleitung & Motivation Prof Dr. Manfred Schmidt-Schauß 1 Motivation Übersicht Programmierparadigmen
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
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
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
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.
MehrGliederung. Algorithmen und Datenstrukturen I. Eine wichtige Frage. Algorithmus. Materialien zur Vorlesung. Begriffsbestimmung EUKLID Primzahltest
Gliederung Algorithmen und Datenstrukturen I Materialien zur Vorlesung D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Winter 2009/10,
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
MehrProgrammieren I. Kapitel 5. Kontrollfluss
Programmieren I Kapitel 5. Kontrollfluss Kapitel 5: Kontrollfluss Ziel: Komplexere Berechnungen im Methodenrumpf Ausdrücke und Anweisungen Fallunterscheidungen (if, switch) Wiederholte Ausführung (for,
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
MehrInformatik I: Einführung in die Programmierung
Informatik I: Einführung in die Programmierung 7. Albert-Ludwigs-Universität Freiburg Bernhard Nebel 31. Oktober 2014 1 31. Oktober 2014 B. Nebel Info I 3 / 20 Um zu, muss man zuerst einmal. Abb. in Public
MehrFormale Sprachen, reguläre und kontextfreie Grammatiken
Formale Sprachen, reguläre und kontextfreie Grammatiken Alphabet A: endliche Menge von Zeichen Wort über A: endliche Folge von Zeichen aus A A : volle Sprache über A: Menge der A-Worte formale Sprache
MehrProgrammierkurs II. C und Assembler
Programmierkurs II C und Assembler Prof. Dr. Wolfgang Effelsberg Universität Mannheim Sommersemester 2003 1-1 Inhalt Teil I: Die Programmiersprache C 2. Datentypen und Deklarationen 3. Operatoren und Ausdrücke
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
MehrProgrammiersprachen und Übersetzer
Programmiersprachen und Übersetzer Sommersemester 2009 5. April 2009 Vorteile bei der Verwendung höherer Programmiersprachen Vorteile bei der Verwendung höherer Programmiersprachen 1. Einfache Notation
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
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
MehrKapitel 3. Grunddatentypen, Ausdrücke und Variable
Kapitel 3 Grunddatentypen, Ausdrücke und Variable Grunddatentypen, Ausdrücke und Variable 1 Eine Datenstruktur besteht aus Grunddatentypen in Java einer Menge von Daten (Werten) charakteristischen Operationen
MehrVorsemesterkurs Informatik
Vorsemesterkurs Informatik Programmieren und Programmiersprachen SoSe 2012 Stand der Folien: 26. März 2012 Übersicht Programme und Programmiersprachen Haskell 1 Programme und Programmiersprachen 2 Haskell
MehrFunktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung
Funktionale Programmierung 1 Funktionale Programmierung: Vorlesungsüberblick 1. Funktionale Programmierung Prinzipien funktionaler Programmierung Funktionale Programmierung in prozeduralen Sprachen Rekursive
MehrAlgorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1
Algorithmen und Datenstrukturen 1. EINLEITUNG Algorithmen und Datenstrukturen - Ma5hias Thimm (thimm@uni-koblenz.de) 1 Allgemeines Einleitung Zu den Begriffen: Algorithmen und Datenstrukturen systematische
Mehr6. Funktionen, Parameterübergabe
6. Funktionen, Parameterübergabe GPS-6-1 Themen dieses Kapitels: Begriffe zu Funktionen und Aufrufen Parameterübergabearten call-by-value, call-by-reference, call-by-value-and-result in verschiedenen Sprachen
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
MehrProgrammierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen
Prof. Dr. Wolfgang Effelsberg Universität Mannheim Sommersemester 2005 1-1 Inhalt (1) Teil I: Die Programmiersprache C 2. Datentypen und Deklarationen 3. Operatoren und Ausdrücke 4. Ablaufsteuerung (Kontrollstrukturen)
MehrProgrammierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen
Prof. Dr. Wolfgang Effelsberg Universität Mannheim Sommersemester 2005 1-1 Inhalt (1) Teil I: Die Programmiersprache C 2. Datentypen und Deklarationen 3. Operatoren und Ausdrücke 4. Ablaufsteuerung (Kontrollstrukturen)
Mehr7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});
S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht
Mehr{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel
Inhalt Hoare-Kalkül Formale Verifizierung Hoare-Kalkül while-sprache Terminierung Partielle / totale Korrektheit 4.0 Hoare-Kalkül entwickelt von C.A.R. (Tony) Hoare (britischer Informatiker), 1969 formales
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
MehrOptimierungen in einer formalen Semantik Konstantenfaltung und Konstantenpropagation
Optimierungen in einer formalen Semantik Konstantenfaltung und Konstantenpropagation http://pp.info.uni-karlsruhe.de/lehre/ss2011/tba/ LEHRSTUHL PROGRAMMIERPARADIGMEN 0 KIT SS Universität 2011 desdenis
Mehr1. Erläutern Sie die Aufgaben von Datentypen in der imperativen Programmierung.
1. Erläutern Sie die Aufgaben von Datentypen in der imperativen Programmierung. Beschreiben Sie ferner je einen frei gewählten Datentyp aus der Gruppe der skalaren und einen aus der Gruppe der strukturierten
MehrEinführung in die Informatik 1
Einführung in die Informatik 1 Algorithmen und algorithmische Sprachkonzepte Sven Kosub AG Algorithmik/Theorie komplexer Systeme Universität Konstanz E 202 Sven.Kosub@uni-konstanz.de Sprechstunde: Freitag,
MehrProf. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe
Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe Was sind Operatoren Ein Operator ist eine in die Programmiersprache eingebaute Funktion, die
Mehr1. Grundkonzepte der logischen Programmierung 2. Syntax von Prolog 3. Rechnen in Prolog. IV.1 Grundkonzepte der logischen Programmierung - 1 -
1. Grundkonzepte der logischen Programmierung 2. Syntax von Prolog 3. Rechnen in Prolog IV.1 Grundkonzepte der logischen Programmierung - 1 - Übersicht Imperative Sprachen Deklarative Sprachen Folge von
MehrZentralübung zur Vorlesung Diskrete Strukturen (Prof. Esparza)
WS 2013/14 Zentralübung zur Vorlesung Diskrete Strukturen (Prof. Esparza) Dr. Werner Meixner Fakultät für Informatik TU München http://www14.in.tum.de/lehre/2013ws/ds/uebung/ 30. Oktober 2013 ZÜ DS ZÜ
Mehr2.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
MehrTag 6. Module, benannte Funktionen und Rekursion
Tag 6 Module, benannte Funktionen und Rekursion Wir verlassen nun die abgeschlossene kleine Welt des interaktiven Interpreters und lernen, wie man richtige Haskell-Programme schreibt. Im Interpreter haben
MehrEinführung in die Informatik
Einführung in die Informatik Klaus Knopper 09.11.2004 Inhaltsverzeichnis Programmiersprachen Eine Programmiersprache ist eine formale Sprache zur Darstellung (Notation) von Computerprogrammen. Sie vermittelt
MehrDas erste C++ Programm
Das erste C++ Programm // Program: power8.c // Raise a number to the eighth power. #include int main() { // input std::cout > a; // computation int
MehrInformatik I: Einführung in die Programmierung
Informatik I: Einführung in die Programmierung 5., bedingte Ausführung und Albert-Ludwigs-Universität Freiburg Bernhard Nebel 27. Oktober 2017 1 und der Typ bool Typ bool Typ bool Vergleichsoperationen
MehrEinführung in die Programmierung für NF. Algorithmen, Datentypen und Syntax
Einführung in die Programmierung für NF Algorithmen, Datentypen und Syntax Ziele Begriffsbildungen: InformaCk, Algorithmus, Programm, Compiler und andere Einordnung von Java Ein einfaches Java- Programm
MehrGrundlagen der OO- Programmierung in C#
Grundlagen der OO- Programmierung in C# Technische Grundlagen 1 Dr. Beatrice Amrhein Überblick Visual Studio: Editor und Debugging Die Datentypen Methoden in C# Die Speicherverwaltung 2 Visual Studio 3
MehrC-Programmierung: Ausdrücke und Operatoren#Division.2F
C-Programmierung: Ausdrücke und Operatoren#Division.2F http://de.wikibooks.org/wiki/c-programmierung:_ausdrücke_und_operatoren#division_.2f This Book Is Generated By Wb2PDF using RenderX XEP, XML to PDF
Mehr1 Formale Sprachen, reguläre und kontextfreie Grammatiken
Praktische Informatik 1, WS 2001/02, reguläre Ausdrücke und kontextfreie Grammatiken 1 1 Formale Sprachen, reguläre und kontextfreie Grammatiken Ein Alphabet A ist eine endliche Menge von Zeichen. Die
MehrPass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl
Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt
MehrAlgorithmen & Programmierung. Logik
Algorithmen & Programmierung Logik Aussagenlogik Gegenstand der Untersuchung Es werden Verknüpfungen zwischen Aussagen untersucht. Aussagen Was eine Aussage ist, wird nicht betrachtet, aber jede Aussage
MehrEIGENSCHAFTEN VON SPRACHEN
Vorlesung und Übung Universität Paderborn Wintersemester 2016/2017 Dr. Peter Pfahler EIGENSCHAFTEN VON SPRACHEN EWS, WS 2016/17, Pfahler C-1 Einführung Sprachen in der Informatik werden für bestimmte Zwecke
MehrDiskrete Strukturen Kapitel 2: Grundlagen (Beweise)
WS 2014/15 Diskrete Strukturen Kapitel 2: Grundlagen (Beweise) Hans-Joachim Bungartz Lehrstuhl für wissenschaftliches Rechnen Fakultät für Informatik Technische Universität München http://www5.in.tum.de/wiki/index.php/diskrete_strukturen_-_winter_14
MehrKapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte
Elementare Schritte Ein elementarer Berechnungsschritt eines Algorithmus ändert im Allgemeinen den Wert von Variablen Zuweisungsoperation von fundamentaler Bedeutung Zuweisungsoperator In Pascal := In
MehrC++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22
C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven
MehrFORTRAN77. eine höllische Programmiersprache. Christian Sternecker. Sommersemester TU-München
FORTRAN77 eine höllische Programmiersprache Christian Sternecker TU-München Sommersemester 2010 Aufbau des Vortrags Geschichte Merkmale Höllische Konzepte Typsicherheit Programmstruktur Speicherverwaltung
MehrVorsemesterkurs Informatik
Stand der Folien: 31. März 2011 Vorsemesterkurs Informatik Sommersemester 2011 Grundlagen der Programmierung in Haskell SoSe 2011 Übersicht 1 Ausdrücke und Typen 2 Funktionen 3 Rekursion 4 Listen 5 Paare
MehrSemantik von Programmiersprachen
Semantik von Programmiersprachen Prof. Dr. Manfred Schmidt-Schauß SS 2013 Stand der Folien: 15. April 2013 Semantik von Programmen verschiedene Semantiken: operationale Semantik (Spezifikation eines Interpreters)
Mehr4.Grundsätzliche Programmentwicklungsmethoden
4.Grundsätzliche Programmentwicklungsmethoden 1.1 Grundlage strukturierter und objektorientierter Programmierung Begriff Software Engineering - umfaßt den gezielten Einsatz von Beschreibungsmitteln, Methoden
MehrProgrammiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften
Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder
MehrEinführung in die Programmierung für NF. Rückgabewerte, EBNF, Fallunterscheidung, Schleifen
Einführung in die Programmierung für NF Rückgabewerte, EBNF, Fallunterscheidung, Schleifen FUNKTIONEN UND PROZEDUREN 3 Rückgabewerte, EBNF, Fallunterscheidung, Schleifen 2 Funk@on und Prozedur Methoden
MehrIntensivübung zu Algorithmen und Datenstrukturen
Intensivübung zu Algorithmen und Datenstrukturen Silvia Schreier Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Übersicht Programmierung Fallunterscheidung Flussdiagramm Bedingungen Boolesche
Mehr