Funktionale Programmierung mit Haskell

Größe: px
Ab Seite anzeigen:

Download "Funktionale Programmierung mit Haskell"

Transkript

1 Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2010 I. Die Sprache Haskell II. Ergänzungen 7. Sprachergänzungen 8. Ergänzungen zu binären Bäumen 9. Syntaxanalyse 10. Algebraische Spezifikation 11. Semantik von Programmiersprachen 12. Compilieren funktionaler Programme c Hans J. Schneider 2010

2 Methoden der Semantikdefinition Operationelle Methode: Transitionssystem (abstrakter Automat) δ : Z Z partielle Überführungsfunktion F Z Endzustände (Bedeutung) Semantik: f : P rograms Data Z Axiomatische Methode: Zustandsraum Prädikate über dem Zustandsraum Bedeutung von Anweisung(sfolg)en: Prädikattransformationen Semantik: Axiome über Prädikattransformationen Denotationelle Methode: Zustandsmenge Funktionen, die Zustände auf Zustände abbilden Funktionen, die elementaren Anweisungen entsprechen Funktionen (höherer Ordnung), die zusammengesetzten Anweisungen entsprechen Zur Vorbereitung betrachten wir die Simulation der Wertzuweisung in Haskell. Funktionale Programmierung mit Haskell 11.1

3 Simulation der Wertzuweisung Wenn das Konzept der funktionalen Programmierung universell ist, muss man die Wertzuweisung simulieren können. Wir betrachten den Speicher als eine Funktion, die zu jeder Adresse den Wert liefert: type Store a = Int -> a Wegen der Typbindung brauchen wir für jeden Datentyp eine eigene Funktion. Alternative: Wir betten alle benötigten Datentypen in eine gemeinsame Oberklasse ein. Zuweisung eines Wertes liefert bei nachfolgenden Zugriffen auf die Funktion ein anderes Ergebnis, wenn genau nach dieser Speicherstelle gefragt wird: assign :: Store a -> Int -> a -> Store a assign s i v i = if i == i then v else s(i ) Funktionale Programmierung mit Haskell 11.2

4 Simulation der Wertzuweisung (II) assign :: Store a -> Int -> a -> Store a assign s i v i = if i == i then v else s(i ) Beispiele: null_vector i = 0 s1 = assign (assign (null_vector) 1 0.5) s2 = assign s1 3 (-1.5) s3 = assign s Main> s Main> s Main> s Main> s Main> s Funktionale Programmierung mit Haskell 11.3

5 Denotationelle Semantik in Haskell Jeder syntaktische Bereich wird in einen semantischen Bereich abgebildet. Syntaktischer Bereich = Menge von Zeichenketten Semantischer Bereich = Menge von Funktionen Beispielsprache besteht nur aus Deklarationen von Konstanten Formale Beschreibung der Semantik von Ausdrücken und Deklarationen Rolle der Umgebung (Was ist wo wie definiert?) Unmittelbare Übersetzung in Haskell Was ändert sich bei der Berücksichtigung von Variablen und Wertzuweisungen? Funktionale Programmierung mit Haskell 11.4

6 Semantische Bereiche Die denotationelle Semantik basiert auf Funktionen, deren Definitionsund Wertebereiche festgelegt werden müssen. Basisbereiche: Bool = { Bool, T, F } Num = { Num, 0, 1, 2, 3,...} Gleichheitstest: e = D e liefert Bool, falls e = D e = D. Bedingungen: Seien e 1 Bool, e 2, e 3 D. Dann ist if e 1 then e 2 else e 3 = D e 2 e 3 falls e 1 = Bool falls e 1 = T falls e 1 = F Im Haskell-Programm verwenden wir statt Num den vorhandenen Bereich Int. Funktionale Programmierung mit Haskell 11.5

7 Zusammengesetzte semantische Bereiche Funktionsbereiche: D 1 D 2 Produktbereiche: D 1 D 2... D n D 1 D 2... D n verschmilzt Tupel, die mindestens ein Di enthalten (smash-produkt). Summenbereiche: D 1 + D D n disjunkte Vereinigung mit neuem D D 1 D 2... D n verschmilzt die Di zu einem D Im Folgenden benutzte spezielle Bereiche: Val = Bool Num ValO = Val {, } Env = (Ident ValO) Funktionale Programmierung mit Haskell 11.6

8 Eine Beispielsprache Wir betrachten eine einfache Programmiersprache, die nur Deklarationen der Form const i = expr enthält. Beispiel: let const i = 1, j = 2, k = i, l = i+3; in l+k; Interessierender semantischer Bereich: Env = Ident ValO Semantische Funktionen: E : expr (Env ValO) CD : const decl (Env Env) Funktionale Programmierung mit Haskell 11.7

9 Semantik der Ausdrücke Bei Ausdrücken mit dyadischen Operatoren wird vorausgesetzt, dass beide Operanden einen definierten Wert haben: E [[e 1 op e 2 ]] = λe. OP [[op]](smash(e [[e 1 ]]e, E [[e 2 ]]e)) Bei bedingten Ausdrücken muss der boolesche Ausdruck definiert sein, ebenso der von diesem ausgewählte: E [[if e 1 then e 2 else e 3 ]] = λe.(λt. if t then E [[e 2 ]]e else E [[e 3 ]]e)(e [[e 1 ]]e) Der Wert eines Bezeichners hängt von der Umgebung ab, die durch die Deklarationen aufgebaut wurde: E [[i]] = λe. bound i e bound : Ident Env ValO bound = λi.λe.[id Val, λx. ](e(i)) Funktionale Programmierung mit Haskell 11.8

10 Semantik der Deklarationen Eine Deklaration fügt einen neuen Bezeichner ein oder definiert ihn um: CD [[const i = expr]] = λe. binding i (E [[expr]] e) binding : Ident ValO Env = Ident (ValO (Ident ValO)) binding = λi.λv.λi. if i = i then in 1 (v) else in 2 ( ) Eine nachfolgende Deklaration ändert die bisherige Umgebung: CD [[d 1 ; d 2 ]] = λe.(λe 1. overlay(cd [[d 2 ]](overlay(e 1, e)), e 1 ))(CD [[d 1 ]]e) overlay : Env Env Env overlay = λ(e, e ).λi.[id Val, λx.e (i)](e(i)) Geschachtelte Ausdrücke hängen auch von der äußeren Umgebung ab: E [[let d in expr]] = λe. E [[expr]](overlay(cd [[d]]e, e)) Funktionale Programmierung mit Haskell 11.9

11 Syntaktische Bereiche in Haskell Syntaktische Bereiche sind auf eine abstrakte Syntax reduziert, betrachten also nicht konkrete Schreibweisen wie Semikolon usw. Wir betrachten zu Testzwecken nur den Deklarationsteil: type Prog = DeclList Abstrakte Syntax der Konstantendeklarationen: type DeclList = [Decl] type Decl = (Ident, Expr) Abstrakte Syntax der arithmetischen Ausdrücke: data Expr = Number Int Const Ident Dyadic Operator Expr Expr data Operator = Plus Minus Times type Ident = [Char] Funktionale Programmierung mit Haskell 11.10

12 Semantische Bereiche in Haskell Umgebung: type Env = Ident -> Val_O Definierte und undefinierte Werte: data Val_O = Defined Val Undefined O_Dom deriving (Eq, Show) data O_Dom = Bottom Top deriving (Eq, Show) Top bezeichnet nichtdeklarierte Bezeichner, Bottom die deklarierten Bezeichner, denen kein definierter Wert zugewiesen ist. Fallunterscheidung bei der disjunktiven Vereinigung: is_defined(defined _) = True is_defined(undefined _) = False Vereinfachung: type Val = Int Funktionale Programmierung mit Haskell 11.11

13 Verarbeitung der Ausdrücke in Haskell Der Wert eines Ausdruckes hängt von der Umgebung ab, in der er ausgewertet wird: eval_expr :: Expr -> Env -> Val_O Mustervergleich liefert die verschiedenen Fälle: Der Wert einer Zahl ist durch diese gegeben: eval_expr (Number x) e = Defined x Der Wert eines Bezeichners ist durch die in der Umgebung gültige Deklaration gegeben: eval_expr (Const i) e = bound i e Operationen sind auszuwerten: eval_expr (Dyadic op e1 e2) e = eval_dyadic op (eval_expr e1 e) (eval_expr e2 e) Funktionale Programmierung mit Haskell 11.12

14 Verarbeitung der Operationen in Haskell Operationen werden nur ausgewertet, wenn beide Operanden definiert sind: eval_dyadic :: Operator -> Val_O -> Val_O -> Val_O eval_dyadic op (Defined x) (Defined y) = Defined (eval_op op x y) eval_dyadic op (Undefined x) y = Undefined Bottom eval_dyadic op x (Undefined y) = Undefined Bottom Beschränkung auf den einfachsten Fall von Operatoren: eval_op :: Operator -> Int -> Int -> Int eval_op Plus = (+) eval_op Minus = (-) eval_op Times = (*) Funktionale Programmierung mit Haskell 11.13

15 Verarbeitung der Deklarationen in Haskell Deklarationsliste: eval_decl_list :: DeclList -> Env -> Env eval_decl_list [] e = e eval_decl_list (d1:d2) e = overlay (eval_decl_list d2 (overlay e e)) e where e = eval_decl d1 e CD [[d 1 ; d 2 ]] = λe.(λe 1. overlay(cd [[d 2 ]](overlay(e 1, e)), e 1 ))(CD [[d 1 ]]e) Einzelne Deklaration: eval_decl (i,ex) e = binding i (eval_expr ex e) Gesamtprogramm : eval_prog :: Prog -> Env eval_prog d = (eval_decl_list d) empty_env Funktionale Programmierung mit Haskell 11.14

16 Verwaltung der Umgebung in Haskell Zugriff auf eine Bindung: bound :: Ident -> Env -> Val_O bound i e = if is_defined(e(i)) then e(i) else Undefined Bottom Veränderung der Bindungen: binding :: Ident -> Val_O -> Ident -> Val_O {- Env -> Env -} binding i v i = if i == i then v else Undefined Top Überlagern von Gültigkeitsbereichen: overlay :: Env -> Env -> Env overlay e e i = if is_defined(e(i)) then e(i) else e (i) Funktionale Programmierung mit Haskell 11.15

17 Beispiel Initialisierung: empty_env :: Env empty_env i = Undefined Top Testbeispiel (nur der Aufbau der Umgebung): bsp1 = eval_prog [("i",number 1),("j",Number 2), ("k", Const "i"), ("l", Dyadic Plus (Const "i") (Number 3))] Abfrage: Semantik> bsp1 "i" Defined 1 Semantik> bsp1 "l" Defined 4 Semantik> bsp1 "m" Undefined Top Funktionale Programmierung mit Haskell 11.16

18 Einfache Variablen Einfache Variablen werden durch Speicherplätze repräsentiert. Loc ist der Bereich der Speicherplätze. SV ist der Bereich der speicherbaren Werte. ST ist der Bereich der Speicherzustände. ST = Loc (SV {, }) ( bedeutet frei; bedeutet reserviert, aber nicht initialisiert.) Anpassung der Umgebungsdefinition: Env = Ident (SV Loc) Zugriffsfunktionen auf den Speicher: stored : Loc ST SV reserv : Loc ST ST store : Loc SV ST ST Funktionale Programmierung mit Haskell 11.17

19 Änderung bei der Auswertung von Bezeichnern Umgebungsdefinition: Env = Ident (SV Loc) Auswertung auf der rechten Seite einer Anweisung: RE : expr Env ST SV Auf der rechten Seite benötigen wir in jedem Fall einen Wert! RE [[id]] = λe.λs. if e(id) SV then e(id) else s(e(id)) Auswertung auf der linken Seite einer Anweisung: LE : expr Env ST Loc Auf der linken Seite benötigen wir in jedem Fall einen Speicherplatz! LE [[id]] = λe.λs. if e(id) SV then else e(id) Funktionale Programmierung mit Haskell 11.18

20 Verwaltung der Umgebung Operationen auf der Umgebung: empty : ST reserv : Loc ST ST store : Loc SV ST ST stored : Loc ST SV Reservierung von Speicherplätzen: empty = λl. reserv = λl.λs.(λl. if l = l then else s(l )) Zugriff auf Speicherplätze: store = λl.λv.λs.(λl. if l = l then v else s(l )) stored = λl.λs.[id SV, λx. ]s(l) Beachte: s(l) ist entweder in SV oder in {, }. Außerdem braucht man eine Funktion, die einen unbenutzten Speicherplatz bereitstellt. Funktionale Programmierung mit Haskell 11.19

21 Anweisungen Syntaktischer Bereich: stat ::= id := expr stat; stat if expr then stat if expr then stat else stat Semantische Funktion: S : Stat Env ST ST Sequenzen und Bedingungen: S [[s 1 ; s 2 ]] = λe. S [[s 2 ]]e S [[s 1 ]]e S [[if b then s 1 ]] = λe.λs. if RE [[b]]e s then S [[s 1 ]]e s else s S [[if b then s 1 else s 2 ]] = λe.λs. if RE [[b]]e s then S [[s 1 ]]e s else S [[s 2 ]]e s Funktionale Programmierung mit Haskell 11.20

22 Hinweis auf Ergänzungen Variablendeklarationen verändern Env und ST: VD : var decl Env ST (Env ST) VD [[var i]] = λe.λs.(λl.(binding i l e, reserv l s)(new loc)) CD und VD müssen zusammengefasst werden zu D. Eine Wertzuweisung verändert nur ST: S [[id := expr]] = λe.λs.(store (LE [[id]] e s) (RE [[expr]] e s) s) (Hier fehlt der Test, ob die linke Seite definiert ist.) Blöcke: BL : block Env ST (Env ST) BL [[decls; stats]] = λe.λs.(λz.(e, S [[stats]] pr 1 (z) pr 2 (z))(d [[decls]] e s) ) Funktionale Programmierung mit Haskell 11.21

Datentypen: integer, char, string, boolean

Datentypen: integer, char, string, boolean Agenda für heute, 13. April, 2006 Der Datentyp integer Vergleichsoperatoren, Wahrheitswerte und boolesche Variablen Zusammengesetzte if-then-else-anweisungen Var i: integer; Teilbereich der ganzen Zahlen,

Mehr

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden Javaprogrammierung mit NetBeans Variablen, Datentypen, Methoden Programmieren 2 Java Bezeichner Bezeichner: Buchstabe _ $ Buchstabe _ $ Ziffer Groß- und Kleinbuchstaben werden strikt unterschieden. Schlüsselwörter

Mehr

Konzepte von Programmiersprachen

Konzepte von Programmiersprachen Konzepte von Programmiersprachen Kapitel 3: Ausdrücke Phillip Heidegger Universität Freiburg, Deutschland SS 2009 Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 1 / 17 Inhalt Let

Mehr

Einführung IMP-Syntax Reduktionssemantik Maschinen-Semantik. Teil IV. Semantik imperativer Sprachen

Einführung IMP-Syntax Reduktionssemantik Maschinen-Semantik. Teil IV. Semantik imperativer Sprachen Teil IV Semantik imperativer Sprachen 201 1. Einführung Alternativen zur Beschreibung der Semantik: natürliche Sprache (bisher, unpräzise) operational Reduktionssemantik (vgl. Haskell-Semantik in Kap.

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Variablen Übersicht 1 Variablendeklaration 2 Initialisierung von Variablen 3 Symbolische Konstanten Variablendeklaration Die Deklaration der Variablen erfolgt durch eine Typangabe

Mehr

Zahlen in Haskell Kapitel 3

Zahlen in Haskell Kapitel 3 Einführung in die Funktionale Programmiersprache Haskell Zahlen in Haskell Kapitel 3 FH Wedel IT-Seminar: WS 2003/04 Dozent: Prof. Dr. Schmidt Autor: Timo Wlecke (wi3309) Vortrag am: 04.11.2003 - Kapitel

Mehr

Geheimnisprinzip: (information hiding principle, Parnas 1972)

Geheimnisprinzip: (information hiding principle, Parnas 1972) 2. Abstrakte Datentypen 2.0 Begriffe Geheimnisprinzip: (information hiding principle, Parnas 1972) Zugriffe auf Teile einer Programmeinheit, die für die reguläre Benutzung nicht erforderlich sind, sollten

Mehr

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff. Gedächtnis Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet Hauptspeicher 38265 Telefon CPU Gedächtnis Vorlesender Zugriff Verarbeitungseinheit

Mehr

Kapitel 4. Kontrollstrukturen

Kapitel 4. Kontrollstrukturen Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen

Mehr

Java Anweisungen und Ablaufsteuerung

Java Anweisungen und Ablaufsteuerung Informatik 1 für Nebenfachstudierende Grundmodul Java Anweisungen und Ablaufsteuerung Kai-Steffen Hielscher Folienversion: 24. Januar 2017 Informatik 7 Rechnernetze und Kommunikationssysteme Inhaltsübersicht

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

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 4. November 2015 Administratives Zur Abgabe von Übungsaufgaben Nein, wir

Mehr

C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue

C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen Leibniz Universität IT Services Anja Aue Zeiger (Pointer) Verweis auf eine Speicherstelle. Speicherung einer Speicheradresse.

Mehr

Java I Vorlesung Imperatives Programmieren

Java I Vorlesung Imperatives Programmieren Java I Vorlesung 2 Imperatives Programmieren 3.5.2004 Variablen -- Datentypen -- Werte Operatoren und Ausdrücke Kontrollstrukturen: if Imperatives Programmieren Im Kern ist Java eine imperative Programmiersprache.

Mehr

WS 2011/2012. Georg Sauthoff 1. October 18, 2011

WS 2011/2012. Georg Sauthoff 1. October 18, 2011 in in WS 2011/2012 Georg 1 AG Praktische Informatik October 18, 2011 1 [email protected] Neue Übungsgruppen in neue Übungsgruppen neue Tutoren Sprechstunden in GZI-Arbeitsraum (V2-240)

Mehr

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. 4.5.5 Rekursive Typen Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. datatype IntList = Nil Cons o f ( i n t IntList ) ; Damit

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster

Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster 16:02:16 2017-01-17 1 [30] Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom 10.01.2017: Monaden als Berechnungsmuster Christoph Lüth Universität Bremen Wintersemester 2016/17 Frohes

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

Objektorientierte Programmierung OOP Programmieren mit Java

Objektorientierte Programmierung OOP Programmieren mit Java Objektorientierte Programmierung OOP Programmieren mit Java 5.1 Elementare Anweisungen 5.1.1 Ausdrucksanweisung 5.1.2 Leere Anweisung 5.1.3 Blockanweisung 5.1.4 Variablendeklaration 5.2 Bedingungen 5.2.1

Mehr

Kapitel 4. Kontrollstrukturen

Kapitel 4. Kontrollstrukturen Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen

Mehr

Java Ablaufsteuerung (Beispiele)

Java Ablaufsteuerung (Beispiele) Informatik 1 für Nebenfachstudierende Grundmodul Java Ablaufsteuerung (Beispiele) Kai-Steffen Hielscher Folienversion: 16. Januar 2018 Informatik 7 Rechnernetze und Kommunikationssysteme Blöcke Anweisungen

Mehr

Kapitel 3: Variablen

Kapitel 3: Variablen Kapitel 3: Variablen Thema: Programmieren Seite: 1 Kapitel 3: Variablen Im letzten Kapitel haben wir gelernt, bestimmte Ereignisse zu wiederholen solange eine Bedingung erfüllt ist. Nun möchten wir aber

Mehr

Einfache Rechenstrukturen und Kontrollfluss

Einfache Rechenstrukturen und Kontrollfluss Einfache Rechenstrukturen und Kontrollfluss Christian Böhm WS 07/08 in Zusammenarbeit mit Gefei Zhang http://www.dbs.informatik.uni-muenchen.de/lehre/nfinfosw 2 Ziele Verstehen der Grunddatentypen von

Mehr

Programmiersprachen Einführung in C

Programmiersprachen Einführung in C Programmiersprachen Einführung Teil 3: Prof. Dr. Jörg Schwenk Lehrstuhl für Netz- und Datensicherheit Gliederung Programmiersprachen 1. Von der Maschinensprache zu C 2. Die Struktur von C-Programmen 3.

Mehr

3 Syntax von Programmiersprachen

3 Syntax von Programmiersprachen 3 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ) formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmiersprache Festlegung, wie Programme

Mehr

Grundlagen der Programmierung 2. Operationale Semantik

Grundlagen der Programmierung 2. Operationale Semantik Grundlagen der Programmierung 2 Operationale Semantik Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 29. April 2009 Semantik von Programmiersprachen Semantik = Bedeutung

Mehr

Welche Informatik-Kenntnisse bringen Sie mit?

Welche Informatik-Kenntnisse bringen Sie mit? Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt

Mehr

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML. JavaScript JavaScript wird direkt in HTML-Dokumente eingebunden. Gib folgende Zeilen mit einem Texteditor (Notepad) ein: (Falls der Editor nicht gefunden wird, öffne im Browser eine Datei mit der Endung

Mehr

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung Gliederung n Teil I: Einleitung und Grundbegriffe l 1. Organisatorisches l 2. Grundlagen von Programmiersprachen n Teil II: Imperative und objektorientierte Programmierung l 1. Grundelemente der Programmierung

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

Herzlich willkommen!

Herzlich willkommen! Programmiertechnik 1 Herzlich willkommen! Dozent: Dipl.-Ing. Jürgen Wemheuer Teil 6: Zusammenfassung und Beispiele Mail: [email protected] Online: http://cpp.ewla.de/ Zusammenfassung (1) 2 1. Programm in

Mehr

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen 16OH21005 gefördert. Die Verantwortung für den Inhalt dieser

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

Einführung in Haskell

Einführung in Haskell Einführung in Haskell Axel Stronzik 21. April 2008 1 / 43 Inhaltsverzeichnis 1 Allgemeines 2 / 43 Inhaltsverzeichnis 1 Allgemeines 2 Funktions- und Typdefinitionen 2 / 43 Inhaltsverzeichnis 1 Allgemeines

Mehr

Typklassen. Natascha Widder

Typklassen. Natascha Widder Typklassen Natascha Widder 19.11.2007 Motivation Typklassen fassen Typen mit ähnlichen Operatoren zusammen ermöglichen überladenen Funktionen Definition Typklassen Deklarationsschema class Name Platzhalter

Mehr

Variablen, Konstanten und Datentypen

Variablen, Konstanten und Datentypen Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling [email protected] Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Variablen, Konstanten und Datentypen Überblick

Mehr

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

Mehr

Boolean Wertemenge: Wahrheitswerte {FALSE,TRUE}, auch {0,1} Deklaration:

Boolean Wertemenge: Wahrheitswerte {FALSE,TRUE}, auch {0,1} Deklaration: Boolean Wertemenge: Wahrheitswerte {,}, auch {,} Deklaration: VAR present,billig,laut,gefunden : BOOLEAN; Ein-/Ausgabe: keine! Operatoren: Negation, Verneinung NOT ~ Konjunktion, logisches UND AND & Disjunktion,

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

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Syntax und Semantik von Haskell Programmieren in Haskell 1 Was wir heute (und nächstes mal) machen Datentypdefinitionen Wertdefinitionen, Variablenbindungen Musterbindungen Funktionsbindungen

Mehr

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2011 I. Die

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Funktionen Rückblick Operatoren logische Verknüpfungen Zusammengesetzte Operatoren ( Zuweisungsoperatoren ) Kontrollstrukturen Bedingte Anweisungen (if-abfrage, switch-konstrukt)

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

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 9. Zeiger Arbeitsspeicher / Adressen Der Arbeitsspeicher des Computers (RAM) besteht aus einem Feld von Speicherzellen, beginnend bei Adresse

Mehr

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung. Java Übung Übung 2 Universität Duisburg-Essen Kommedia, Übung EinPro SS06, 19. April 2006 (UniDUE) 19. April 2006 1 / 13 Java Programme Java Programme bestehen aus (meist mehreren) Klassen. In den Klassen

Mehr

Interpreter - Gliederung

Interpreter - Gliederung Institut für Informatik Ludwig-Maximilian Universität Interpreter - Gliederung Programmiersprache Syntax Konkrete Syntax Abstrakter Syntax Baum (Abstrakte Syntax) Parser Syntaktische Struktur einer Sprache

Mehr

Vorkurs Informatik WiSe 16/17

Vorkurs Informatik WiSe 16/17 Java Ausdrücke und Variablen Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 05.10.2016 Technische Universität Braunschweig, IPS Überblick Ausdrücke, Datentypen und Variablen Kontrollstrukturen 05.10.2016

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

Allgemeine Hinweise:

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen SS 2011 Einführung in die Informatik I Midtermklausur Prof. Dr. Helmut Seidl, A. Lehmann, A. Herz,

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 2 (1.A)

Grundlagen der Programmierung 2 (1.A) Grundlagen der Programmierung 2 (1.A) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 18. April 2007 Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte

Mehr

Paradigmen der Programmierung

Paradigmen der Programmierung SS 11 Prüfungsklausur 25.07.2011 Aufgabe 5 (6+9 = 15 Punkte) a) Bestimmen Sie jeweils den Typ der folgenden Haskell-Ausdrücke: ( 1, 2 :"3", 4 < 5) :: (Char, String, Bool) [(last, tail), (head, take 5)]

Mehr

Operatoren (1) Operatoren (2)

Operatoren (1) Operatoren (2) Operatoren (1) Binäre Operatoren + - * / % < = > & ^ > && Addition Subtraktion Multiplikation Division Divisionsrest Vergl. auf kleiner Vergl. auf kleiner oder gleich Vergl. auf gleich Vergl.

Mehr

3.4 Struktur von Programmen

3.4 Struktur von Programmen 3.4 Struktur von Programmen Programme sind hierarchisch aus Komponenten aufgebaut. Für jede Komponente geben wir Regeln an, wie sie aus anderen Komponenten zusammengesetzt sein können. program ::= decl*

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

2.3 Spezifikation von Abstrakten Datentypen

2.3 Spezifikation von Abstrakten Datentypen Abstrakte Datentypen (ADT) 2.3 Spezifikation von Abstrakten Datentypen Sichtbare Schnittstelle: Typbezeichner Signaturen der Operationen Spezifikation der Operationen Abstraktionsbarriere Implementierung

Mehr

C- Kurs 03 Ausdrücke und Operatoren

C- Kurs 03 Ausdrücke und Operatoren C- Kurs 03 Ausdrücke und Operatoren Dipl.- Inf. Jörn Hoffmann [email protected] leipzig.de Universität Leipzig InsDtut für InformaDk Technische InformaDk Ausdrücke Institut für Informatik Ausdrücke

Mehr

Schwerpunkte. 8. Ausdrücke, Operatoren (einfache Typen) Beispiel: Schaltjahr Test. Einführendes Beispiel: Grundprobleme

Schwerpunkte. 8. Ausdrücke, Operatoren (einfache Typen) Beispiel: Schaltjahr Test. Einführendes Beispiel: Grundprobleme Schwerpunkte Vollständige und unvollständige Auswertung 8. Ausdrücke, Operatoren (einfache Typen) Teil 1 Seiteneffekte Overloading: Überladung von Operatoren Implizite und explizite (cast) Typumwandlung

Mehr

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen Programmieren I Martin Schultheiß Hochschule Darmstadt Wintersemester 2011/2012 1 / 25 Operatoren für elementare Datentypen Bedingte Schleifen 2 / 25 Zuweisungsoperator Die Zuweisung von Werten an Variablen

Mehr

Operatoren in C/C++ und Java:

Operatoren in C/C++ und Java: Operatoren in C/C++ und Java: C/C++/Java hat eine riesige Anzahl von Operatoren (im Vergleich zu anderen Programmiersprachen). Außer den üblichen arithmetischen Operatoren +, -, *, / (und % für Ganzzahlen)

Mehr

3. Grundanweisungen in Java

3. Grundanweisungen in Java 3. Grundanweisungen in Java Die Grundanweisungen entsprechen den Prinzipien der strukturierten Programmierung 1. Zuweisung 2. Verzweigungen 3. Wiederholungen 4. Anweisungsfolge (Sequenz) Die Anweisungen

Mehr

Imperative Programmierung in Java: Kontrollfluß II

Imperative Programmierung in Java: Kontrollfluß II 2 Imperative Programmierung in va: Kontrollfluß II Martin Wirsing Ziele Lernen imperative Programme in va mit Zuweisung, Block, Fallunterscheidung, Iteration zu schreiben Lernen Kontrollflußdiagramme zur

Mehr

Crashkurs: Haskell. Mentoring FU Berlin Felix Droop

Crashkurs: Haskell. Mentoring FU Berlin Felix Droop Crashkurs: Haskell Mentoring FU Berlin 7.11.2018 Felix Droop Crashkurs Haskell 1. GHCi Umgebung

Mehr

Informatik für Schüler, Foliensatz 2 Ausdrücke, Variablen, Datentypen, Ein- und Ausgabe

Informatik für Schüler, Foliensatz 2 Ausdrücke, Variablen, Datentypen, Ein- und Ausgabe Prof. G. Kemnitz Institut für Informatik, Technische Universität Clausthal 26. August 2009 1/17 Informatik für Schüler, Foliensatz 2 Ausdrücke, Variablen, Datentypen, Ein- und Ausgabe Prof. G. Kemnitz

Mehr

Programmierkurs Python I

Programmierkurs Python I Programmierkurs Python I Michaela Regneri 2009-11-05 (Folien basieren auf dem gemeinsamen Kurs mit Stefan Thater) Übersicht Variablen Datentypen Werte Operatoren und Ausdrücke Kontrollstrukturen: if, while

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Wir steigen ein... Programmieren in Haskell 1 Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke und Werte Datentypen Funktionen Aufgabe für diese Woche Programmieren

Mehr

Datentypen. Agenda für heute, 4. März, 2010. Pascal ist eine streng typisierte Programmiersprache

Datentypen. Agenda für heute, 4. März, 2010. Pascal ist eine streng typisierte Programmiersprache Agenda für heute, 4. März, 2010 Zusammengesetzte if-then-else-anweisungen Datentypen Pascal ist eine streng typisierte Programmiersprache Für jeden Speicherplatz muss ein Datentyp t (Datenformat) t) definiert

Mehr

Algorithmen und Datenstrukturen 1 Kapitel 4.1

Algorithmen und Datenstrukturen 1 Kapitel 4.1 Algorithmen und Datenstrukturen 1 Kapitel 4.1 Technische Fakultät [email protected] Vorlesung, U. Bielefeld, Winter 2005/2006 Kapitel 4: Maschinenmodelle [Dieses Kapitel hält sich eng an

Mehr