Haskell und Python. pures Programmieren, Auswerten von Ausdrücken rekursives Programmieren, Typsystem. Python: Eine prozedurale Programmiersprache

Größe: px
Ab Seite anzeigen:

Download "Haskell und Python. pures Programmieren, Auswerten von Ausdrücken rekursives Programmieren, Typsystem. Python: Eine prozedurale Programmiersprache"

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

Mehr

Grundlagen der Programmierung 2 (1.B)

Grundlagen 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

Mehr

Wieviel Vorfahren? Grundlagen der Programmierung 2. Beispiel: Aufrufhierarchie. Aufrufhierarchie und Rekursive Definitionen. Haskell: Auswertung

Wieviel 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

Mehr

Programmiersprachen: rekursives Programmieren in Haskell

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

Mehr

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

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

Mehr

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell

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

Mehr

Grundlagen der Programmierung 3 A

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

Mehr

Programmiersprachen: rekursives Programmieren in Haskell

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

Mehr

ALP I Einführung in Haskell

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

Mehr

Basiskonstrukte von Haskell

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

Ü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

Mehr

Einführung in die Funktionale Programmierung: Einleitung & Motivation

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

Mehr

4.4 Imperative Algorithmen Prozeduren

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

Mehr

Einführung in die funktionale Programmierung

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

Mehr

1 Funktionale vs. Imperative Programmierung

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

Mehr

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

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

Mehr

Haskell, Typen und Typberechnung

Haskell, Typen und Typberechnung Kapitel 5 Haskell, Typen und Typberechnung 5.1 Typisierung in Haskell In diesem Kapitel sind die Typisierungsmethoden in Haskell beschrieben, wobei auch kurz auf die Typisierung in anderen Programmiersprachen

Mehr

Einführung in die Informatik I (autip)

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

Mehr

Funktionale Programmierung Grundlegende Datentypen

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

Mehr

Werkzeuge zur Programmentwicklung

Werkzeuge zur Programmentwicklung Werkzeuge zur Programmentwicklung B-15 Bibliothek Modulschnittstellen vorübersetzte Module Eingabe Editor Übersetzer (Compiler) Binder (Linker) Rechner mit Systemsoftware Quellmodul (Source) Zielmodul

Mehr

Programmierung in Python

Programmierung 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

Mehr

Funktionen in Matlab. Nutzerdefinierte Funktionen können in.m-datei gespeichert werden

Funktionen 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

Mehr

LR-Parser, Shift-Reduce-Verfahren

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

Mehr

Crashkurs Haskell Mentoring WiSe 2016/17. Anja Wolffgramm Freie Universität Berlin

Crashkurs 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

Mehr

Operationen auf Grammatiken

Operationen 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

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 2 vom : Funktionen und Datentypen

Praktische 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

Mehr

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Was 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

Mehr

Einführung in C. EDV1-04C-Einführung 1

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

Mehr

Konzepte der Programmiersprachen

Konzepte 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

Mehr

Lösungen zum Übungsblatt 3: Softwareentwicklung I (WS 2006/07)

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

Mehr

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002

Ü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

Mehr

4.1 Bäume, Datenstrukturen und Algorithmen. Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als

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

Mehr

Tag 3. Funktionen. Num erfüllen, haben wir... ja, was nun eigentlich? Bei

Tag 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

Mehr

Projekt 3 Variablen und Operatoren

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

Mehr

Workshop Einführung in die Sprache Haskell

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

Mehr

DieÜbersetzung funktionaler Programmiersprachen

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

Mehr

Funktionale Programmierung

Funktionale 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

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

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

Mehr

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmiersprache 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

Ü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

Mehr

2. Programmierung in C

2. 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)

Mehr

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

Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR. Methoden zur Interpretation LISPähnlicher Programmiersprachen Seminarvortrag 20.01.2017 FACHBEREICH 9 TOBIAS STUMM MATR.-NR. 4012917 1 Inhalt Motivation Lisp > Definition > Scheme Interpreter > Definition

Mehr

Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 5A. Lösung zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler)

Vorsemesterkurs 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

Mehr

C.3 Funktionen und Prozeduren

C.3 Funktionen und Prozeduren C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens

Mehr

Funktionale Programmiersprachen

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

Ü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

Mehr

1. Typen 1.1 Typsicherheit 1.2 Typprüfung

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

Mehr

Tableaukalkül für Aussagenlogik

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

Mehr

Kapitel 6: Typprüfung

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

Mehr

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

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

Mehr

Gliederung. Algorithmen und Datenstrukturen I. Eine wichtige Frage. Algorithmus. Materialien zur Vorlesung. Begriffsbestimmung EUKLID Primzahltest

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

Mehr

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

Funktionale Programmierung. Das Funktionale Quiz. Das Funktionale Quiz. Das Funktionale Quiz Funktionale Programmierung Das Funktionale Quiz 31.5.2005 Nenne eine Gemeinsamkeit zwischen Typklassen und OO-Klassen Das Funktionale Quiz Das Funktionale Quiz Nenne einen Unterschied zwischen Typklassen

Mehr

Programmieren I. Kapitel 5. Kontrollfluss

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

Mehr

Haskell, Typen und Typberechnung

Haskell, Typen und Typberechnung Kapitel 5 Haskell, Typen und Typberechnung 5.1 Typisierung in Haskell In diesem Kapitel sind die Typisierungsmethoden in Haskell beschrieben, wobei auch kurz auf die Typisierung in anderen Programmiersprachen

Mehr

Informatik I: Einführung in die Programmierung

Informatik 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

Mehr

Formale Sprachen, reguläre und kontextfreie Grammatiken

Formale 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

Mehr

Programmierkurs II. C und Assembler

Programmierkurs 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

Mehr

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

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

Mehr

Programmiersprachen und Übersetzer

Programmiersprachen 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

Mehr

Semantik von Programmiersprachen SS 2017

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

Mehr

Programmieren in Haskell Programmiermethodik

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

Mehr

Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Kapitel 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

Mehr

Vorsemesterkurs Informatik

Vorsemesterkurs 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

Mehr

Funktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung

Funktionale 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

Mehr

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1

Algorithmen 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

Mehr

6. Funktionen, Parameterübergabe

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

Mehr

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

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

Mehr

Programmierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen

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

Mehr

Programmierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen

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

Mehr

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

7 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

{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

Mehr

Der einfach getypter Lambda-Kalkül

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

Mehr

Optimierungen in einer formalen Semantik Konstantenfaltung und Konstantenpropagation

Optimierungen 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

Mehr

1. Erläutern Sie die Aufgaben von Datentypen in der imperativen Programmierung.

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

Mehr

Einführung in die Informatik 1

Einfü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,

Mehr

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

Mehr

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

Mehr

Zentralübung zur Vorlesung Diskrete Strukturen (Prof. Esparza)

Zentralü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Ü

Mehr

2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.

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

Mehr

Tag 6. Module, benannte Funktionen und Rekursion

Tag 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

Mehr

Einführung in die Informatik

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

Mehr

Das erste C++ Programm

Das 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

Mehr

Informatik I: Einführung in die Programmierung

Informatik 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

Mehr

Einführung in die Programmierung für NF. Algorithmen, Datentypen und Syntax

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

Mehr

Grundlagen der OO- Programmierung in C#

Grundlagen 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

Mehr

C-Programmierung: Ausdrücke und Operatoren#Division.2F

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

Mehr

1 Formale Sprachen, reguläre und kontextfreie Grammatiken

1 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

Mehr

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Pass 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

Mehr

Algorithmen & Programmierung. Logik

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

Mehr

EIGENSCHAFTEN VON SPRACHEN

EIGENSCHAFTEN 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

Mehr

Diskrete Strukturen Kapitel 2: Grundlagen (Beweise)

Diskrete 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

Mehr

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Kapitel 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

Mehr

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

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

Mehr

FORTRAN77. eine höllische Programmiersprache. Christian Sternecker. Sommersemester TU-München

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

Mehr

Vorsemesterkurs Informatik

Vorsemesterkurs 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

Mehr

Semantik von Programmiersprachen

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

Mehr

4.Grundsätzliche Programmentwicklungsmethoden

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

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

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

Mehr

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

Mehr

Intensivübung zu Algorithmen und Datenstrukturen

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