Programmieren in Haskell Das Haskell Typsystem

Größe: px
Ab Seite anzeigen:

Download "Programmieren in Haskell Das Haskell Typsystem"

Transkript

1 Programmieren in Haskell Das Haskell Typsystem Peter Steffen Robert Giegerich Universität Bielefeld Technische Fakultät Programmieren in Haskell

2 Belauscht... Lisa Lista: Ohne Typen keine korrekten Programme! Harry Hacker: Ach was! Korrekte Programme brauchen keine Typen! Wer hat recht? 2 Programmieren in Haskell

3 Einfache Datentypen (vordefiniert) Die einfachsten Datentypen: Bool (), genannt Void Char Int, Integer Rational, Float, Double Int -> Int, Int -> Musik -> Musik, etc. In einer funktionalen Sprache sind auch Funktionen Daten erster Klasse sie können nicht nur auf Argumente angewandt werden, sondern auch in Datenstrukturen verpackt, als Argumente übergeben, oder zu neuen Funktionen zusamengesetzt werden, also Ergebnisse sein. Nur Vergleichen (EQ) und Ausdrucken (Show) kann man sie nicht. 3 Programmieren in Haskell

4 Algebraische Datentypen Algebraische Datentypen werden durch Konstruktoren gebildet. Eigentlich stellen sie die Formeln dar, mit denen dann gerechnet wird. Musik (mit Konstruktoren Instr, Tempo, Note, Pause, *, +) Bool (mit Konstruktoren True, False) Ordering (mit Konstruktoren LT, EQ, GT) Von diesen Beispielen ist nur Musik ein rekursiver Datentyp, der beliebig viele (und aus viele Teilen zusammengesetzte) Werte enthält. 4 Programmieren in Haskell

5 Monomorphe Listen Listen mit Elementen vom Typ Int: data Intlist = IntNil IntCons Int IntList Einwände: Das ist wenig nützlich für jeden weiteren Element-Datentyp muss man einen neuen Listentyp einführen. (In manchen Programmiersprachen ist das tatsächlich so!) Viele Operationen mit Listen hängen nicht vom Elementtyp ab die möchte man nur einmal programmieren! 5 Programmieren in Haskell

6 Das Haskell-Typkonzept ist so stark, dass Typ-korrrekte Proramme oft auch schon korrekt sind. Das liegt am parametrischen Typ-Polymorphismus. Typen werden dadurch flexibler, aber weiter gilt der alte Grundsatz: Ein typ-korrektes Programm erzeugt zur Laufzeit keine Typfehler. oder auch Well-typed programs don t go wrong. 6 Programmieren in Haskell

7 Haskell erlaubt parametrisierte Typen: data [a] = [] a:[a] -- polymorphe Listen -- beachte: alle Elemente haben den gleichen Typ data Tree a = Leaf a Br (Tree a) (Tree a) data TTree a b = Leaf a Br (Tree b a) [a] (Tree b a) -- hier wechseln die Typen pro Ebene, -- aber streng kontrolliert f g :: [a] -> [a] :: Tree a -> [a] 7 Programmieren in Haskell

8 Typdeklarationen Typdeklarationen in Haskell sind optional. Sie dienen der Dokumentation der bewußten Einschränkung des Typs (enger als nötig), z.b. reversi:: [Int] -> [Int] reversi xs = reverse xs wenn man möchte, dass reversi NUR auf Int-Listen angewandt werden kann. Auch ohne Typdeklarationen können alle Typen bestimmt und geprüft werden. 8 Programmieren in Haskell

9 Typinferenz Grundlegendes zur Typinferenz: Jeder Ausdruck in einem Haskell-Programm hat einen allgemeinsten Typ. Dieser Typ kann automatisch bestimmt werden durch Typinferenz. Beim Rechnen spielen die Typen keine Rolle (mehr). Meistens stimmt der inferierte Typ mit dem deklarierten (sofern vorhanden) überein. Andernfalls gilt: Der deklarierte Typ ist allgemeiner: FEHLER Der deklarierte Typ ist spezieller: Der allgemeine Typ wird entsprechend eingeschränkt. DieTypen sind unvergleichbar: FEHLER 9 Programmieren in Haskell

10 Allgemeiner und spezieller... a -- der allgemeinste Typ, den es gibt -- (a ist beliebige Typvariable) a -> b -- der allgemeinste Funktionstyp, den es gibt Ein Typ ist spezieller als ein anderer, wenn er aus ihm durch (konsistentes) Einsetzen für Typvariablen entsteht. Hier eine Kette von Spezialisierungen: a ==> b ==> (a -> b) => a -> (c -> d) ==> a -> b -> b ==> a -> [a] -> [a] -- das ist der Typ von (:) ==> Tree b -> [Tree b] -> [Tree b] -- (:) in einer Anwendung 10 Programmieren in Haskell

11 Beispiele zur Typinferenz Der Typ einer polymorphen Funktion spezialsiert sich in der Anwendung: (:) :: a -> [a] -> [a] ( a :"braham") :: [Char] (: "xx") :: Char -> [Char] ( x :) :: [Char] -> [Char] ("x":) :: [[Char]] -> [[Char]] Hugs> :type (: a ) ERROR - Type error in application *** Expression : (: a ) *** Term : (:) *** Type : b -> [b] -> [b] *** Does not match : a -> Char -> [b] Scheitert die Typinferenz, liegt ein Fehler vor. 11 Programmieren in Haskell

12 Typinferenz für map Wir gehen von der Definition aus: map f [] = [] map f (x:xs) = f x : map f xs ermittelter Typ Begründung c -> d -> e -- map hat 2 Argumente c -> d -> [b] -- das Ergebnis ist eine Liste c -> [a] -> [b] -- das 2. Argument ist eine Liste (f -> g) -> [a] -> [b] -- das 1.Argument ist eine Funktion, (a -> g) -> [a] -> [b] -- die Argumente vom Typ a erhält, (a -> b) -> [a] -> [b] -- und Ergebnisse vom Typ b liefert. Den allgemeinsten Typ erhalten wir, weil wir nirgendwo eine unnötige Annahme machen. 12 Programmieren in Haskell

13 Typinferenz eines Audrucks Wir gehen von bereits bekannten Typen für Zahlen und vordefinierte Funktionen aus und leiten eine Typaussage für einen Ausdruck ab: map (1:)::h -- der Ausdruck hat einen Typ map:: (a -> b) -> [a] -> [b] -- bereits bekannt (:):: c -> [c] -> [c] -- bereits bekannt 1::Int -- bereits bekannt c == Int -- 1 erstes Argument von (:) (:):: Int -> [Int] -> [Int] -- Typ von (:) in diesem Kontext (1:):: [Int] -> [Int] -- (:) angewandt aufs erste Argument -- bleibt eine Funktion des zweiten 13 Programmieren in Haskell

14 [a] -> [b] == [Int] -> [Int] -- (1:) ist erstes Argument von map a == Int, b == Int -- Konsequenz des vorigen map:: ([Int] -> [Int]) -> [[Int]] -> [[Int]] -- spezieller Typ von -- map in diesem Ausdruck map (1:):: [[Int]] -> ][Int]]-- map angewandt auf erstes Argument -- bleibt eine Funktion des zweiten h == [[Int]] -> [[Int]] -- allgemeinster Typ für map (1:)... und das stimmt überein mit dem, was diese Funktion berechnet: Hugs> map (1:) [[5..9],[20..24],[2,4..8]] [[1,5,6,7,8,9],[1,20,21,22,23,24],[1,2,4,6,8]] 14 Programmieren in Haskell

15 Typinferenz mit In Wirklichkeit ist es noch etwas komplizierter. Man weiss ja nur, dass 1 eine Zahl ist, also der Typklasse NUM angehört. Hugs> :type 1 1 :: Num a => a Hugs> :type (1:) (1 :) :: Num a => [a] -> [a] Hugs> :type map (1:) map (1 :) :: Num a => [[a]] -> [[a]] Hugs> :type map ((1::Integer):) map (1:) :: [[Integer]] -> [[Integer]] Hugs> :type map (1.5:) map (1.5 :) :: Fractional a => [[a]] -> [[a]] 15 Programmieren in Haskell

16 können auf alle Daten angewandt werden, zu deren Typ sich ihr allgemeiner Typ spezialisieren lässt. Vorteil: Kompakter Code, wenig Fehler. 16 Programmieren in Haskell

17 Was sagt ihr Typ über die Funktion? Wir kennen: id :: a -> a ix x = x Welche andere Funktionen gibt es noch von diesem recht allgemeinen Typ, (abgesehen von umständlicheren Definitionen der gleichen Funktion)? Keine. 17 Programmieren in Haskell

18 Was sagt ihr Typ über die Funktion? Wir kennen: id :: a -> a ix x = x Welche andere Funktionen gibt es noch von diesem recht allgemeinen Typ, (abgesehen von umständlicheren Definitionen der gleichen Funktion)? Keine. 17 Programmieren in Haskell

19 Was sagt ihr Typ über die Funktion? (2) Welche Funktion hat den noch allgemeineren Typ f :: a -> b 18 Programmieren in Haskell

20 Was sagt ihr Typ über die Funktion? (2) Welche Funktion hat den noch allgemeineren Typ f :: a -> b Die überall undefinierte Funktion... f :: a -> b f x = f x... und sonst keine. 19 Programmieren in Haskell

21 Fluch der Allgemeinheit Auf der ersten Blick scheint es paradox: Die Funktionen mit den allgemeinsten Typen f:: a -> b f:: a -> a sind die nutzlosesten Funktionen! 20 Programmieren in Haskell

22 höherer Ordnung (1) Was mag das sein: srol:: solution -> (a -> [a] -> solution -> solution)-> [a] -> solution srol base extend = rec where rec [] = base rec (x:xs) = extend x xs (rec xs) 21 Programmieren in Haskell

23 höherer Ordnung (1) Was mag das sein: srol:: solution -> (a -> [a] -> solution -> solution)-> [a] -> solution srol base extend = rec where rec [] = base rec (x:xs) = extend x xs (rec xs) 21 Programmieren in Haskell

24 srol in Worten srol ist eine Funktion, die als Arfumente einen Wert und eine Funktion erwartet. Angewandt auf diese, ergibt sie eine Funktion, die Listen verarbeitet und dabei für die leere Liste den Wert einsetzt, und ansonsten den Listenrest verarbeitet und sodann das Ergebnis abhängig vom Listenkopf modifiziert. Oder anders gesagt: srol ist das SCHEMA der strukturellen Rekursion auf Listen. 22 Programmieren in Haskell

25 srol in Worten srol ist eine Funktion, die als Arfumente einen Wert und eine Funktion erwartet. Angewandt auf diese, ergibt sie eine Funktion, die Listen verarbeitet und dabei für die leere Liste den Wert einsetzt, und ansonsten den Listenrest verarbeitet und sodann das Ergebnis abhängig vom Listenkopf modifiziert. Oder anders gesagt: srol ist das SCHEMA der strukturellen Rekursion auf Listen. 22 Programmieren in Haskell

26 srol angewandt isort = srol [] (\a _ s -> insert a s) insert a = srol [a] (\b x s -> if a <= b then a:b:x else b:s) Man muss sich klarmachen, dass s jeweils die (rekursiv errechnete) Lösung der Aufgabe für x darstellt! 23 Programmieren in Haskell

27 srol Varianten srol bezieht sich explizit auf den Datentyp Liste. Es werden ja die beiden Konstruktoren [] und (:) explizit benutzt. Für andere Datentypen wie Musik oder Tree muss ein eigenes Schema definiert werden. Das wird noch eleganter bei der Wohlfundierten Rekursion! 24 Programmieren in Haskell

28 Schema der Wohlfundierten Rekursion problem steht für den Datentyp, für den wir ein Problem mit Wohlfundierter Rekursion lösen wollen. dac:: (problem -> Bool) -> (problem -> solution) -> (problem -> [problem]) -> ([solution] -> solution) -> problem -> solution -- easy -- solve -- divide -- conquer dac easy solve divide conquer = rec where rec x = if easy x then solve x else conquer [rec y y <- divide x] 25 Programmieren in Haskell

29 Anwendung von dac Implementierung des mergesort: msort = dac (\x -> drop 1 x == []) (\x -> x) (\x -> let k = length x div 2 in [take k x, drop k x] (\[s,t] -> merge s t) Wo ist die Rekursion geblieben? Sie wird vom Scheme dac eingebracht das, worauf merge angewandt wird, ist der msort von (take k x) und (drop k x). 26 Programmieren in Haskell

30 Anwendung von dac Implementierung des mergesort: msort = dac (\x -> drop 1 x == []) (\x -> x) (\x -> let k = length x div 2 in [take k x, drop k x] (\[s,t] -> merge s t) Wo ist die Rekursion geblieben? Sie wird vom Scheme dac eingebracht das, worauf merge angewandt wird, ist der msort von (take k x) und (drop k x). 26 Programmieren in Haskell

31 Schlussfolgerungen Funktionen höherer Ordnung sind ein machtvolles Hilfsmittel: Sie erlauben, beliebige Schemata der Benutzung von funktionellen Bauteilen zu definieren Sie ersetzen das, was man in anderen Sprachen Kontrollstruktur nennt. Sie erlauben dem Programmierer, seine eigenen Kontrollstrukturen zu definieren. Dadurch lassen sich anwendungsbezogene Programmierstile entwickeln Beispiele sind Pretty printing Combinator Parsing Algebraic Dynamic Programming 27 Programmieren in Haskell

32 Eine Typklasse ist eine Menge von Typen. Sie ist charakterisiert durch eine Menge von Funktionen, die auf allen Typen dieser Klasse und mit dem gleichen Namen definiert sind. Diese Funktionen nennt man in diesem Zusammenhang gerne Methoden. Vordefinierte sind Show mit Methoden show, read,... Eq mit Methoden ==, / = Ord mit Methoden <, >,,... Num mit Methoden +,,,... und viele andere. 28 Programmieren in Haskell

33 Neue Neue werden durch Klassendefinitionen eingeführt, die die Typen der Operationen (hier gerne Methoden genannt) deklarieren. Es können auch einige der Methoden als Default definiert werden, indem sie sich gegenseitig benutzen. Wenn ein Typ zur Instanz einer Klasse erklärt wird, müssen die Methoden implementiert werden. 29 Programmieren in Haskell

34 Beispiel: Klasse Sequenzen class Sequence s where empty :: s a single :: a -> s a isempty :: s a -> Bool issingle :: s a -> Bool vorndran :: a -> sa -> s a hintan :: sa -> a -> s a hd :: s a -> a tl :: s a -> s a app :: s a -> s a -> s a len :: s a -> Int single a = vorndran a empty issingle s = not(isempty s) && isempty (tl s) len s = if empty s then 0 else 1 + len (tl s) 30 Programmieren in Haskell

35 Instanziierung Ein Datentyp kann zur Instanz einer Klasse erklärt werden: instance Sequence [] where... instance Tree [] where... Hier müssen jeweils die Methoden implementiert werden. Fehlt eine Implementierung, werden die Defaults aus der Klassendefinition eingesetzt. Diverse Instanziierungen von Sequence findet man im Skript. 31 Programmieren 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. 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

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

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel

Mehr

Was bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen:

Was bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen: Was bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen: Peano-Zahlen, Listen, Bäume Rekursive Funktionen strukturelle

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

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

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. Jan Hermanns

Funktionale Programmierung mit Haskell. Jan Hermanns Funktionale Programmierung mit Haskell Jan Hermanns 1 Programmiersprachen imperativ deklarativ konventionell OO logisch funktional Fortran Smalltalk Prolog Lisp C Eiffel ML Pascal Java Haskell 2 von Neumann

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Felder (Arrays) Programmieren in Haskell 1 Was wir heute machen Motivationsbeispiel Die Typklasse Ix Felder in Haskell Funktionstabellierung Binäre Suche Pascalsches Dreieck Ein

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

expr :: Expr expr = Mul (Add (Const 3) (Const 4)) (Div (Sub (Const 73) (Const 37)) (Const 6))

expr :: Expr expr = Mul (Add (Const 3) (Const 4)) (Div (Sub (Const 73) (Const 37)) (Const 6)) 1 - Korrektur 2 - Abstrakte Datentypen für arithmetische Ausdrücke Der Datentyp Wir beginnen zunächst mit dem algebraischen Datentyp für Ausdrücke. Hierfür definieren wir einen Konstruktor Number für Zahlen,

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

Grundprinzipien der funktionalen Programmierung

Grundprinzipien der funktionalen Programmierung Grundprinzipien der funktionalen Programmierung Funktionen haben keine Seiteneffekte Eine Funktion berechnet einen Ausgabewert der nur von den Eingabewerten abhängt: 12 inputs + output 46 34 2 Nicht nur

Mehr

Beispiele: (Funktionen auf Listen) (3) Bemerkungen: Die Datenstrukturen der Paare (2) Die Datenstrukturen der Paare

Beispiele: (Funktionen auf Listen) (3) Bemerkungen: Die Datenstrukturen der Paare (2) Die Datenstrukturen der Paare Beispiele: (Funktionen auf Listen) (3) Bemerkungen: 5. Zusammenhängen der Elemente einer Liste von Listen: concat :: [[a]] -> [a] concat xl = if null xl then [] else append (head xl) ( concat (tail xl))

Mehr

Tutorium - Haskell in der Schule. Ralf Dorn - Dennis Buchmann - Felix Last - Carl Ambroselli

Tutorium - Haskell in der Schule. Ralf Dorn - Dennis Buchmann - Felix Last - Carl Ambroselli Tutorium - Haskell in der Schule Wer sind wir? Otto-Nagel-Gymnasium in Berlin-Biesdorf Hochbegabtenförderung und MacBook-Schule Leistungskurse seit 2005 Einführung Was ist funktionale Programmierung? Einführung

Mehr

Typdeklarationen. Es gibt in Haskell bereits primitive Typen:

Typdeklarationen. Es gibt in Haskell bereits primitive Typen: Typdeklarationen Es gibt in bereits primitive Typen: Integer: ganze Zahlen, z.b. 1289736781236 Int: ganze Zahlen mit Computerarithmetik, z.b. 123 Double: Fließkommazahlen, z.b. 3.14159 String: Zeichenketten,

Mehr

Tag 7. Pattern Matching und eigene Datentypen

Tag 7. Pattern Matching und eigene Datentypen Tag 7 Pattern Matching und eigene Datentypen Heute werden wir eine Technik kennenlernen, die dafür sorgt, daß wir sehr viel übersichtlichere und kürzere Programme schreiben können. Als Überleitung auf

Mehr

Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen

Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen Rev. 1152 1 [23] Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen Christoph Lüth & Dennis Walter Universität Bremen Wintersemester 2010/11

Mehr

Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS 2013. Prof. Dr. Margarita Esponda. Prof. Dr.

Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS 2013. Prof. Dr. Margarita Esponda. Prof. Dr. ALP I Funktionen höherer Ordnung Teil 2 SS 2013 Funktionen höherer Ordnung Nehmen wir an, wir möchten alle Zahlen innerhalb einer Liste miteinander addieren addall:: (Num a) => [a -> a addall [ = 0 addall

Mehr

Funktionale Programmierung

Funktionale Programmierung Schleifen 1 Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 3 Teil I Jedem Anfang wohnt ein Zauber inne 4 Über mich Diplom in Informatik in Saarbrücken

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

Programmieren in Haskell Einführung

Programmieren in Haskell Einführung Programmieren in Haskell Einführung Peter Steffen Universität Bielefeld Technische Fakultät 16.10.2009 1 Programmieren in Haskell Veranstalter Dr. Peter Steffen Raum: M3-124 Tel.: 0521/106-2906 Email:

Mehr

Agenda. 1 Einleitung. 2 Binäre Bäume. 3 Binäre Suchbäume. 4 Rose Trees. 5 Zusammenfassung & Ausblick. Haskell Bäume. Einleitung.

Agenda. 1 Einleitung. 2 Binäre Bäume. 3 Binäre Suchbäume. 4 Rose Trees. 5 Zusammenfassung & Ausblick. Haskell Bäume. Einleitung. Vortrag: Bäume in Haskell Bäume in Haskell Vortrag Christoph Forster Thomas Kresalek Fachhochschule Wedel University of Applied Sciences 27. November 2009 Christoph Forster, Thomas Kresalek 1/53 Vortrag

Mehr

ALP I. Funktionale Programmierung

ALP I. Funktionale Programmierung ALP I Funktionale Programmierung Sortieren und Suchen (Teil 1) WS 2012/2013 Suchen 8 False unsortiert 21 4 16 7 19 11 12 7 1 5 27 3 8 False sortiert 2 4 6 7 9 11 12 18 21 24 27 36 Suchen in unsortierten

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 3 vom : Algebraische Datentypen

Praktische Informatik 3: Funktionale Programmierung Vorlesung 3 vom : Algebraische Datentypen 16:01:59 2017-01-17 1 [35] Praktische Informatik 3: Funktionale Programmierung Vorlesung 3 vom 01.11.2016: Algebraische Datentypen Christoph Lüth Universität Bremen Wintersemester 2016/17 PI3 WS 16/17

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

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Programmieren mit Listen Programmieren in Haskell 1 Was wir heute machen Eigener Listen-Datentyp Eine Sortierfunktion Nützliche Listenfunktionen Programmieren in Haskell 2 Ein

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

Programmieren in Haskell. Abstrakte Datentypen

Programmieren in Haskell. Abstrakte Datentypen Programmieren in Haskell Abstrakte Datentypen Einführung Man unterscheidet zwei Arten von Datentypen: konkrete Datentypen: beziehen sich auf eine konkrete Repräsentation in der Sprache. Beispiele: Listen,

Mehr

Programmieren in Haskell Felder (Arrays)

Programmieren in Haskell Felder (Arrays) Programmieren in Haskell Felder (Arrays) Peter Steffen Universität Bielefeld Technische Fakultät 05.12.2008 1 Programmieren in Haskell Quadratzahlen 0 1 2 3 n 0 1 4 9 n 2 squareslist :: Integral a => [a]

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Definieren Sie eine Funktion circlearea zur Berechnung der Fläche eines Kreises mit gegebenen Radius (Float).

Definieren Sie eine Funktion circlearea zur Berechnung der Fläche eines Kreises mit gegebenen Radius (Float). Haskell Funktionen Definieren Sie eine Funktion circlearea zur Berechnung der Fläche eines Kreises mit gegebenen Radius (Float). circlearea :: Float -> Float circlearea radius = 2 * pi * radius^2 Definieren

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

26 Hierarchisch strukturierte Daten

26 Hierarchisch strukturierte Daten Algorithmik II Peter Wilke Sommersemester 2005 Teil III Funktionale Programmierung 26 Hierarchisch strukturierte Daten Peter Wilke Algorithmik II Sommersemester 2005 1 Peter Wilke Algorithmik II Sommersemester

Mehr

Haskell zur Constraint-Programmierung HaL8

Haskell zur Constraint-Programmierung HaL8 Haskell zur Constraint-Programmierung HaL8 Alexander Bau 2. Mai 2013 Wir benutzen eine Teilmenge von Haskell zur Spezifikation von Constraint- Systemen über Haskell-Datentypen. Ein Constraint-Compiler

Mehr

Verträge für die funktionale Programmierung Design und Implementierung

Verträge für die funktionale Programmierung Design und Implementierung 1 Verträge für die funktionale Programmierung Design und Implementierung RALF HINZE Institut für Informatik III, Universität Bonn Römerstraße 164, 53117 Bonn, Germany Email: [email protected]

Mehr

Fortgeschrittene Programmierung

Fortgeschrittene Programmierung Skript zur Vorlesung Fortgeschrittene Programmierung SS 2014 Prof. Dr. Michael Hanus Priv.Doz. Dr. Frank Huch Arbeitsgruppe Programmiersprachen und Übersetzerkonstruktion Institut für Informatik Christian-Albrechts-Universität

Mehr

Grundlagen der Programmierung 2 (1.C)

Grundlagen der Programmierung 2 (1.C) Grundlagen der Programmierung 2 (1.C) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 3. Mai 2006 Funktionen auf Listen: map map :: (a -> b) -> [a] -> [b] map f [] = []

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

Generische Record-Kombinatoren mit statischer Typprüfung

Generische Record-Kombinatoren mit statischer Typprüfung System Generische mit statischer Typprüfung Brandenburgische Technische Universität Cottbus Lehrstuhl Programmiersprachen und Compilerbau Lehrstuhlkolloquium am 13. Januar 2010 Überblick System System

Mehr

Funktionale Programmierung mit C++

Funktionale Programmierung mit C++ Funktionale Programmierung mit C++ Überblick Programmierung in funktionaler Art Warum funktionale Programmierung? Was ist funktionale Programmierung? Charakteristiken funktionaler Programmierung Was fehlt

Mehr

Formale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen

Formale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen Was bisher geschah Formale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen Syntax: Signatur Semantik: Axiome (FOL-Formeln, meist

Mehr

Proseminar: Perlen der Informatik II Haskell List comprehensions & Typklassen

Proseminar: Perlen der Informatik II Haskell List comprehensions & Typklassen Proseminar: Perlen der Informatik II Haskell List comprehensions & Typklassen Dmitriy Traytel 8. Juli 2008 Diese Ausarbeitung im Rahmen des Proseminars Perlen der Informatik II beschäftigt sich mit einigen

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 20. November 2006 Monaden und I/O Monade ist ein Datentyp für (sequentielle)

Mehr

Typ-basiertes Programmieren und Schließen in Funktionalen Sprachen

Typ-basiertes Programmieren und Schließen in Funktionalen Sprachen Typ-basiertes Programmieren und Schließen in Funktionalen Sprachen Jun.-Prof. Janis Voigtländer Institut für Informatik III Universität Bonn WS 2009/10 Organisation Wahlpflichtvorlesung im Diplomstudiengang,

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

3.2 Modellierende Spezifikation von ADT

3.2 Modellierende Spezifikation von ADT 3.2 Modellierende Spezifikation von ADT Wie kann ich das Verhalten der Operationen eines ADO spezifizieren, wenn ich mich wegen der Datenabstraktion nicht auf seine Daten beziehen kann? 2 Alternativen:

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie [email protected]

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at Inhalt SWP Funktionale Programme (2. Teil) Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie [email protected] Interpreter für funktionale Sprache

Mehr

Kapitel 7: Benutzerdefinierte Datentypen

Kapitel 7: Benutzerdefinierte Datentypen Kapitel 7: Benutzerdefinierte Datentypen Andreas Abel LFE Theoretische Informatik Institut für Informatik Ludwig-Maximilians-Universität München 10. Juni 2011 Quelle: Martin Wirsing, Benutzerdefinierte

Mehr

1 Polymorphie (Vielgestaltigkeit)

1 Polymorphie (Vielgestaltigkeit) 1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen

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

Vorlesung Datenstrukturen

Vorlesung Datenstrukturen Vorlesung Datenstrukturen Binärbaum Suchbaum Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 356 Datenstruktur Binärbaum Strukturrepräsentation des mathematischen Konzepts Binärbaum

Mehr

Typklassen, Eingabe und Monaden In Haskell

Typklassen, Eingabe und Monaden In Haskell Typklassen, Eingabe und Monaden In Haskell Felix Rahmati Jonathan Beierle 1 Einleitung In dieser Ausarbeitung befassen wir uns mit den Vorteilen einiger fortgeschrittener Konzepte der funktionalen Programmierung

Mehr

Funktionen höherer Ordnung

Funktionen höherer Ordnung Eine Funktion wird als Funktion höherer Ordnung bezeichnet, wenn Funktionen als Argumente verwendet werden, oder wenn eine Funktion als Ergebnis zurück gegeben wird. Beispiel: twotimes :: ( a -> a ) ->

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

5.4 Klassen und Objekte

5.4 Klassen und Objekte 5.4 Klassen und Objekte Zusammenfassung: Projekt Figuren und Zeichner Figuren stellt Basisklassen für geometrische Figuren zur Verfügung Zeichner bietet eine übergeordnete Klasse Zeichner, welche die Dienstleistungen

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

Tutoraufgabe 1 (Datenstrukturen in Haskell):

Tutoraufgabe 1 (Datenstrukturen in Haskell): Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Allgemeine Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung (Tutorium)

Mehr

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 1 -

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 1 - Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 1 - Dozent: Prof. Dr. G. Rote Tutoren: J. Fleischer, T. Haimberger, N. Lehmann, C. Pockrandt, A. Steen 18.10.2011 Ziele

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

Programmtransformationen und Induktion in funktionalen Programmen

Programmtransformationen und Induktion in funktionalen Programmen Programmtransformationen und Induktion in funktionalen Programmen Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 13. Januar 2009 Einschub: Monadisches IO verzögern Implementierung

Mehr

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil IVb WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil IVb WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I Lambda-Kalkül Teil IVb WS 2012/2013 λ-kalkül-parser Hilfsfunktionen: Die break-funktion ist eine Funktion höherer Ordnung, die eine Liste beim ersten Vorkommen einer Bedingung in zwei Listen spaltet.

Mehr

Gebundene Typparameter

Gebundene Typparameter Gebundene Typparameter interface StringHashable { String hashcode(); class StringHashMap { public void put (Key k, Value v) { String hash = k.hashcode();...... Objektorientierte

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

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

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

Übung Datenstrukturen. Objektorientierung in C++

Übung Datenstrukturen. Objektorientierung in C++ Übung Datenstrukturen Objektorientierung in C++ Aufgabe 1a - Farben Schreiben Sie eine Klasse COLOR zur Beschreibung von Farben. Eine Farbe werde hierbei additiv durch ihren Rot-, Grün- und Blauanteil

Mehr

Theorie zu Übung 8 Implementierung in Java

Theorie zu Übung 8 Implementierung in Java Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept

Mehr

Assoziative Container in C++ Christian Poulter

Assoziative Container in C++ Christian Poulter Assoziative Container in C++ Christian Poulter Seminar: Die Sprache C++ Mat-Nr.: 53 03 129 EMail: [email protected] Christian Poulter Assoziative Container in C++ Seite 1/10 Inhalt 1. Einleitung: Container...

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

CGI Programmierung mit Ha. Markus Schwarz

CGI Programmierung mit Ha. Markus Schwarz CGI Programmierung mit Ha Markus Schwarz Überblick Was ist funktionale Programmierung Einführung in Haskell CGI-Programmierung mit Haskell Ein etwas größeres Beispiel Was ist funktionale Programm Ein Programm

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Advanced Programming in C

Advanced Programming in C Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer

Mehr

Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine. Studienleistung

Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine. Studienleistung Adressen Adressen, Termine Studienleistung Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Büro und Email Raum 216, Robert-Mayer-Str. 11-15 [email protected]

Mehr

Proseminar Funktionales Programmieren. Stephan Kreutzer

Proseminar Funktionales Programmieren. Stephan Kreutzer Proseminar Funktionales Programmieren Die Programmiersprache LISP Stephan Kreutzer Teil I: Funktionales Programmieren Imperative Sprachen Imperative Sprachen: Befehlsorientiert Imperative Sprachen orientieren

Mehr

II.3.1 Rekursive Algorithmen - 1 -

II.3.1 Rekursive Algorithmen - 1 - 1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.3.1 Rekursive Algorithmen -

Mehr

RO-Tutorien 3 / 6 / 12

RO-Tutorien 3 / 6 / 12 RO-Tutorien 3 / 6 / 12 Tutorien zur Vorlesung Rechnerorganisation Christian A. Mandery WOCHE 2 AM 06./07.05.2013 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft

Mehr

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte) Praktische Informatik (Software) Vorlesung Softwareentwicklung 1 Prof. Dr. A. Ferscha Hauptklausur am 01. 02. 2001 Zuname Vorname Matr. Nr. Stud. Kennz. Sitzplatz HS / / / Punkte Note korr. Fügen Sie fehlende

Mehr

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2008/09 Einführung in die Informatik 2 Klausur Prof. Dr. Helmut Seidl, T. M. Gawlitza, S. Pott,

Mehr

Funktionale Programmierung mit C++

Funktionale Programmierung mit C++ Funktionale Programmierung mit C++ Rainer Grimm Softwarearchitekt Partner: Überblick Programmierung in funktionaler Art Warum funktionale Programmierung? Was ist funktionale Programmierung? Charakteristiken

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Programmierung mit C Zeiger

Programmierung mit C Zeiger Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch

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

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8 Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

1.2 Attribute und Methoden Aufbau einer Java-Klasse: Aufbau einer Java-Klasse: public class Quadrat { int groesse; int xposition; String farbe; boolean istsichtbar; public void sichtbarmachen() { istsichtbar = true; public void horizontalbewegen(int distance){

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen

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