Funktionale Programmierung mit Haskell
|
|
|
- Innozenz Dunkle
- vor 9 Jahren
- Abrufe
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
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,
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
Konzepte von Programmiersprachen
Konzepte von Programmiersprachen Kapitel 3: Ausdrücke Phillip Heidegger Universität Freiburg, Deutschland SS 2009 Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 1 / 17 Inhalt Let
Einführung 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.
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
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
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
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
Kapitel 4. Kontrollstrukturen
Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen
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
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
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
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.
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.
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)
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
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
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
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
Kapitel 4. Kontrollstrukturen
Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen
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
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
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
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.
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
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
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
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
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
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.
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
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
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)
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
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
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
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
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,
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
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
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
Vorkurs C++ Programmierung
Vorkurs C++ Programmierung Funktionen Rückblick Operatoren logische Verknüpfungen Zusammengesetzte Operatoren ( Zuweisungsoperatoren ) Kontrollstrukturen Bedingte Anweisungen (if-abfrage, switch-konstrukt)
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
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
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
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
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
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
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
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,
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
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
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)]
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.
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*
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
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
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
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
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
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)
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
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
Crashkurs: Haskell. Mentoring FU Berlin Felix Droop
Crashkurs: Haskell Mentoring FU Berlin 7.11.2018 Felix Droop Crashkurs Haskell 1. GHCi Umgebung
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
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
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
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
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
