Frage: Gibt es Dinge die wir nur in anderen Sprachen berechnen können? Was kann man wirklich mit dem λ-kalkül ausdrücken?

Größe: px
Ab Seite anzeigen:

Download "Frage: Gibt es Dinge die wir nur in anderen Sprachen berechnen können? Was kann man wirklich mit dem λ-kalkül ausdrücken?"

Transkript

1 3 Der λ-kalkül Ausdruckskraft des λ-kalküls Ausdruckskraft des λ-kalküls Frage: Gibt es Dinge die wir nur in anderen Sprachen berechnen können? Was kann man wirklich mit dem λ-kalkül ausdrücken? Antwort: Alles was man überhaupt mit irgendeiner Programmiersprache ausdrücken kann, kann man auch im λ-kalkül ausdrücken. Solche formalen Systeme (und damit den λ-kalkül) nennt man Turing-vollständig. cf. Seite 190, Exkurs zum Thema Berechenbarkeit. Stefan Klinger DBIS Informatik 2 Sommer

2 3 Der λ-kalkül Ausdruckskraft des λ-kalküls 3.7 Datenstrukturen vs. Operationen Wir haben schon betont, dass der (reine) λ-kalkül keine primitiven Datentypen (z.b. Integer, Boolean) kennt und auch keine eingebauten Operationen darauf. Dennoch kann man diese mit dem λ-kalkül nachbilden. Ebenso wie man konstruierte Datentypen mit Funktionen nachbauen kann. Beispiel Darstellung von Paaren im λ-kalkül: Wir beschreiben zunächst die Schnittstelle des abstrakten Typs Pair. pair :: α β Pair α β fst :: Pair α β α snd :: Pair α β β und seine Eigenschaften (Konstruktor) (Accessor) (Accessor) fst (pair a b) a snd (pair a b) b Stefan Klinger DBIS Informatik 2 Sommer

3 3 Der λ-kalkül Ausdruckskraft des λ-kalküls 3.7 (nochmal die Eigenschaften) fst (pair a b) a snd (pair a b) b... bis hierhin sieht das aus wie eine algebraische Spezifikation eines abstrakten Datentyps. Jetzt realisieren wir das im λ-kalkül: pair = λx y s. s x y fst = λp. p (λx y. x) snd = λp. p (λx y. y)...bleibt nur noch zu beweisen, dass die geforderten Eigenschaften erfüllt sind. Beweis für fst (pair a b) a: fst (pair a b) = (λp. p (λx y. x)) (pair a b) β pair a b (λx y. x) = (λx y s. s x y) a b (λx y. x) β (λy s. s a y) b (λx y. x) β (λs. s a b) (λx y. x) β β β (λx y. x) a b (λy. a) b a Stefan Klinger DBIS Informatik 2 Sommer

4 3 Der λ-kalkül Ausdruckskraft des λ-kalküls 3.7 Ähnlich kann man das auch mit primitiven (z.b. Boolean und Integer) oder anderen konstruierten Datentypen (z.b. Listen) machen. Diese Technik der Repräsentation von Daten und Operatoren im λ-kalkül nennt man Church Codierung (siehe dazu auch später: Algebraische Datentypen sowie einige Übungsaufgaben). Dualität von Daten und Operationen... ein Beispiel dafür, dass die Unterscheidung zwischen Daten und Operationen keine scharfe, zwingende ist. Man kann auch umgekehrt ein Programm (z.b. einen λ-ausdruck) als Datenobjekt betrachten und mit einem (anderen oder gar dem gleichen) Programm bearbeiten... Stefan Klinger DBIS Informatik 2 Sommer

5 4 Haskell Typen, Werte und einfache Definitionen

6 4 Haskell Typen, Werte und einfache Definitionen Typen Typen Intuitiv unterteilt man die Objekte, die man mit einer Programmiersprache manipulieren will, in disjunkte Mengen, etwa: Zeichen, ganze Zahlen, Listen, Bäume und Funktionen: Objekte verschiedener Mengen haben unterschiedliche Eigenschaften, (Zeichen und auch ganze Zahlen sind bspw. anzuordnen, Funktionen nicht) für die Objekte verschiedener Mengen sind unterschiedliche Operationen sinnvoll. (eine Funktion kann angewandt werden, eine ganze Zahl kann mit 0 verglichen werden, aber auf einen Wahrheitswert kann man nicht addieren, etc.) Viele Programmiersprachen (wie auch Haskell) formalisieren diese Intuition mittels eines Typsystems. Typen im λ-kalkül? Weder der einfache, noch der erweiterte λ-kalkül haben ein Typsystem. Später werden wir Typsystem für den λ-kalkül betrachten. Stefan Klinger DBIS Informatik 2 Sommer

7 4 Haskell Typen, Werte und einfache Definitionen Typen 4.1 Ein Typ definiert 1. eine Menge von gleichartigen Objekten (Wertevorrat, Domain ) und 2. Operationen, die auf diese Objekte anwendbar sind (Interface). Einige Basis-Typen: Objektmenge Typname Operationen (Auswahl) Ganze Zahlen Integer +, max, <, >, == Zeichen Char max, <, >, == Wahrheitswerte Bool &&, ==, not Fließkommazahlen Double *, /, round Typkonstruktoren konstruieren aus beliebigen Typen α, β neue Typen: Objektmenge Typkonstruktor Operationen (Auswahl) Funktionen von α nach β α β $, map Listen von α-objekten [α] head, reverse, length Paare von α, β-objekten (α,β) fst, snd Stefan Klinger DBIS Informatik 2 Sommer

8 4 Haskell Typen, Werte und einfache Definitionen Typen 4.1 Die Notation x :: α (x hat den Typ α) wird vom Haskell-Compiler eingesetzt, um anzuzeigen, dass das Objekt x den Typ α besitzt. Umgekehrt können wir so dem Compiler anzeigen, dass x eine Instanz des Typs α sein soll. Beispiel 2 :: Integer X :: Char 0.05 :: Double round :: Double -> Integer [2,3] :: [Integer] head :: [α] -> α ( a,(2,true)) :: (Char,(Integer,Bool)) snd :: (α,β) -> β Manche Typen (z.b. von snd) enthalten Typvariablen α, β,... Das entspricht der Beobachtung, dass snd das zweite Element eines Paares bestimmen kann, ohne Details der gepaarten Objekte zu kennen oder Operationen auf diese anzuwenden. Stefan Klinger DBIS Informatik 2 Sommer

9 4 Haskell Typen, Werte und einfache Definitionen Interpretation komplexer Typen Interpretation komplexer Typen Beispiel Typ der Prelude-Funktion unzip :: [(α, β)] ([α], [β]) unzip :: unzip ist eine Funktion... unzip :: [...]......die eine Liste... unzip :: [(α,β)]......von Paaren als Argument hat,... unzip :: [(α, β)] (...,...)...und ein Paar... unzip :: [(α, β)] ([α], [β])...von Listen als Ergebnis liefert,......und dabei ist der Elementtyp α der ersten Liste der gleiche wie der Typ der ersten Komponente der Argumentlistenpaare und derjenige der zweiten Liste (also β) der gleiche wie der der zweiten Komponente der Argumentlistenpaare. unzip [(x 1, y 1 ),..., (x n, y n )] ([x 1,..., x n ], [y 1,..., y n ]) Stefan Klinger DBIS Informatik 2 Sommer

10 4 Haskell Typen, Werte und einfache Definitionen Currying und der Typkonstruktor Currying und der Typkonstruktor Erinnerung Mittels Currying kann eine Funktion mehrerer Argumente sukzessive auf ihre Argumente angewandt werden (cf. Seite 87). Auch haskell verwendet Currying, und damit spielt Currying auch bei der Typisierung von Funktionen eine Rolle. Beispiel Typ der Funktion (des Operators) +, bei Anwendung auf zwei Argumente vom Typ Integer, also x :: Integer, y :: Integer: x + y ((+ x) y) 1. Der Teilausdruck (+ x) besitzt den Typ Integer Integer, 2. damit hat + also den Typ Integer (Integer Integer). Vereinbarung: ist rechts-assoziativ. Schreibe daher kürzer (+) :: Integer Integer Integer Stefan Klinger DBIS Informatik 2 Sommer

11 4 Haskell Typen, Werte und einfache Definitionen Currying und der Typkonstruktor 4.3 Haskell besitzt einen Mechanismus zur Typinferenz, der für (fast) jedes Objekt x den zugehörigen Typ α automatisch bestimmt. Haskell ist streng typisiert, d.h. eine Operation kann niemals auf Objekte angewandt werden, für die sie nicht definiert wurde. statisch typisiert, d.h. schon zur Übersetzungszeit und nicht erst während des Programmlaufs wird sichergestellt, dass Programme keine Typfehler enthalten. Der Interpreter oder Compiler weist inkorrekt typisierte Ausdrücke sofort zurück. Beispiel Typische Typfehlermeldung: 1 Prelude> fst [2,3] 2 <interactive>:2:5: 3 Couldn t match expected type (α, β) with actual type [Integer] 4... Stefan Klinger DBIS Informatik 2 Sommer

12 4 Haskell Typen, Werte und einfache Definitionen Deklaration & Definition Deklaration & Definition Haskell-Programm (Skript) = Deklarationen + Definitionen Beispiel Fakultätsfunktion fact 1 fact :: Integer -> Integer 2 fact n = if n == 0 3 then 1 4 else n * fact (n-1) Deklaration fact :: Integer -> Integer fact ist eine Funktion, die einen Wert des Typs Integer (ganze Zahl) auf einen Wert des Typs Integer abbildet. Definition fact n =... (Rekursive) Regeln für die Berechnung der Fakultätsfunktion. Stefan Klinger DBIS Informatik 2 Sommer

13 4 Haskell Typen, Werte und einfache Definitionen Basis-Typen Basis-Typen Haskell stellt diverse Basis-Typen zur Verfügung. Die Notation für Konstanten dieser Typen ähnelt anderen Programmiersprachen. Ganze Zahlen: Integer Der Typ Integer enthält die ganzen Zahlen, der Wertebereich ist unbeschränkt. Haskell kennt auch den Typ Int, fixed precision integers, mit Wertebereich [ 2 29, ] Eine nichtleere Sequenz von Ziffern stellt ein Integer-Literal dar. (kann aber auch als anderer numerischer Typ aufgefasst werden, cf. PK2, oder später) Allgemein werden negative Zahlen durch die Anwendung der Funktion negate oder des Prefix-Operators - gebildet. Achtung: Operator - wird auch zur Subtraktion benutzt, wie etwa in f -123 f (-123) Beispiele: 0, 42, Stefan Klinger DBIS Informatik 2 Sommer

14 4 Haskell Typen, Werte und einfache Definitionen Basis-Typen 4.5 Konstanten des Typs Char (Zeichen) Zeichenkonstanten werden durch Apostrophe (ASCII 39) eingefasst. Nichtdruckbare und Sonderzeichen werden mit Hilfe des bspw. auch in C verwendeten \ (escape, backslash) eingegeben. Nach \ kann ein ASCII-Mnemonic (etwa NUL, BEL, FF,...) oder ein dezimaler (oder hexadezimaler nach \x bzw. oktaler nach \o) Wert stehen, der den ASCII-Code des Zeichens festlegt. Zusätzlich werden die folgenden Abkürzungen erkannt: \a (alarm) \b (backspace) \f (formfeed) \n (newline) \r (carriage return) \t (Tab) \v (vertical feed) \\ (backslash) \" (dbl quote) \ (apostroph) \& (NULL) Beispiele: P, s, \n, \BEL, \x7f, \, \\ Stefan Klinger DBIS Informatik 2 Sommer

15 4 Haskell Typen, Werte und einfache Definitionen Basis-Typen 4.5 Konstanten des Typs Float (Fließkommazahlen) Fließkommakonstanten enthalten stets einen Dezimalpunkt. Vor und hinter diesem steht mindestens eine Ziffer Die Konstante kann optional von e bzw. E und einem ganzzahligen Exponenten (zur Basis 10) gefolgt werden. Beispiele: , 10.0e-4, 0.001, E6 Konstanten des Typs Bool (Wahrheitswerte) Bool ist ein Summentyp (Aufzählungstyp, enumerated type) und besitzt lediglich die beiden Konstanten 21 True und False. 21Später: Konstruktoren. Stefan Klinger DBIS Informatik 2 Sommer

16 4 Haskell Typen, Werte und einfache Definitionen Funktionen Funktionen Funktionen in funktionalen Programmiersprachen sind tatsächlich im mathematischen Sinne zu verstehen. Ein Wert f mit f :: α -> β bildet bei Anwendung Objekte des Typs α auf Objekte des Typs β ab und es gilt 22 x = y f x = f y Diese einfache aber fundamentale mathematische Eigenschaft von Funktionen zu bewahren, ist die Charakteristik funktionaler Programmiersprachen. 22Referenzielle Transparenz, cf. später Stefan Klinger DBIS Informatik 2 Sommer

17 4 Haskell Typen, Werte und einfache Definitionen Funktionen 4.6 Variablennamen, und damit auch die Namen von Funktionen 23 beginnen mit Kleinbuchstaben a...z gefolgt von a...z, A...Z, 0...9, _ und. Als RegEx: [a z][a z A Z 0 9 _ ] Beispiele: foo, c_3_p_o, f Haskell ist case-sensitive, i.e., foobar foobar. Die Funktionsapplikation ist der einzige Weg in Haskell komplexere Ausdrücke zu bilden. Applikation wird syntaktisch durch Juxtaposition (Nebeneinanderschreiben) ausgedrückt: Beispiel: Anwendung von Funktion f auf die Argumente x und y: f x y Die Juxtaposition hat höhere Priorität als Infix-Operatoren: f x + y (f x) + y Klammern ( ) können zur Gruppierung eingesetzt werden. 23bis auf Operatoren, cf. Seite 133 Stefan Klinger DBIS Informatik 2 Sommer

18 4 Haskell Typen, Werte und einfache Definitionen Funktionen 4.6 Operatoren Operatoren sind nichts anderes als Funktionen mit besonderen syntaktischen Eigenschaften (andere Zeichen, meist infix notiert). Haskell erlaubt die Einführung neuer Infix-Operatoren. Operatoren erfüllen den RegEx ~:. ] + Übliche Infix-Operatoren (+, *, ==, <,...) sind bereits vordefiniert. Operatoren, die mit : beginnen, spielen eine Sonderrolle (cf. Seite 267, Algebraische Datentypen). Die Token.., :, ::, =, \,, <-, ~, =>, -- sind reserviert, ebenso der einzige unäre Präfix-Operator - (Minus). Beispiel Definition von ~~ als fast gleich : 1 epsilon :: Float 2 epsilon = 1.0e (~~) :: Float -> Float -> Bool 5 x ~~ y = abs (x-y) < epsilon 1 > pi ~~ False 3 > pi ~~ True 5 > Stefan Klinger DBIS Informatik 2 Sommer

19 4 Haskell Typen, Werte und einfache Definitionen Funktionen 4.6 Operatoren sind Funktionen Infix-Operator Prefix-Applikation. Jeder Infix-Operator kann in der Notation ( ) auch als Prefix-Operator geschrieben werden (cf. Seite 139): (+) 1 3 True && False (&&) True False Funktion Infix-Applikation. Umgekehrt kann man jede binäre Funktion f (Funktion zweier Argumente) mittels der Schreibweise f (ASCII 96) als Infix-Operator verwenden: max max 5 Die so notierten Infix-Operatoren werden durch die Sprache als links-assoziativ und mit höchster Operatorpriorität (Level 9) interpretiert: 5 max Stefan Klinger DBIS Informatik 2 Sommer

20 4 Haskell Typen, Werte und einfache Definitionen Funktionen 4.6 Bemerkung: Information über die Assoziativität und Priorität eines Operators durch den Interpreter: 1 > :i + 2 class (Eq a, Show a) => Num a where 3 (+) :: a -> a -> a Defined in GHC.Num 6 infixl 6 + Die letzte Zeile verrät uns: + ist linksassoziativ, und hat priorität 6. Stefan Klinger DBIS Informatik 2 Sommer

21 4 Haskell Typen, Werte und einfache Definitionen Funktionen 4.6 Currying Prinzipiell hat jede in Haskell definierte Funktion nur einen Parameter. Funktionen mehrerer Parameter werden durch Currying realisiert (cf. oben). Der Typ einer Funktion mehrerer Parameter, etwa max : N N N wird dargestellt als max :: Integer -> Integer -> Integer Damit max eine Funktion eines Integer-Parameters, die bei Anwendung einen Wert (hier: wieder eine Funktion) des Typs Integer -> Integer liefert. Dieser kann dann auf ein weiteres Integer-Argument angewandt werden, um letzlich das Ergebnis des Typs Integer zu bestimmen. Stefan Klinger DBIS Informatik 2 Sommer

22 4 Haskell Typen, Werte und einfache Definitionen Funktionen 4.6 Currying im λ-kalkül: Haskell-Funktionsdefinitionen sind tatsächlich lediglich syntaktischer Zucker für die schon bekannten λ-abstraktionen: f x = e f = λx. e g x y = e g = λx y. e Damit lässt sich Currying durch mehrfache β-reduktion erklären. Beispiel Maximumsfunktion: 1 max :: Integer -> Integer -> Integer 2 max x y = if x<y then y else x max = λx y. if (x < y) y x max 2 5 Definition von max (λx y. if (x < y) y x) 2 5 β (λy. if (2 < y) y 2) 5 β if (2 < 5) 5 2 δ 5 Stefan Klinger DBIS Informatik 2 Sommer

23 4 Haskell Typen, Werte und einfache Definitionen Funktionen 4.6 Partielle Anwendung Currying erlaubt die partielle Anwendung von Funktionen. Der Wert des Ausdrucks (+) 1 hat den Typ Integer -> Integer und ist die Funktion, die 1 zu ihrem Argument addiert. Beispiel Nachfolgerfunktion inc: 1 inc :: Integer -> Integer 2 inc = (+) 1 Stefan Klinger DBIS Informatik 2 Sommer

24 4 Haskell Typen, Werte und einfache Definitionen Funktionen 4.6 Sections Currying ist auch auf binäre Operatoren anwendbar, da Operatoren ja lediglich binäre Funktionen in Infix-Schreibweise (mit festgelegter Assoziativität) sind. Man erhält dann die sogenannten Sections. Für jeden Infix-Operator gilt (die Klammern ( ) gehören zur Syntax!): (x ) λy. x y ( y) λx. x y ( ) λx y. x y Beispiel 1 inc = (1+) 2 halve = (/2) 3 add = (+) 4 positive = ( max 0) Sections erlauben viele elegante Notationen: Stefan Klinger DBIS Informatik 2 Sommer

25 4 Haskell Typen, Werte und einfache Definitionen Funktionen 4.6 λ-abstraktionen (anonyme Funktionen) Haskell erlaubt λ-abstraktionen als Ausdrücke und somit anonyme Funktionen, i.e., Funktionen ohne Namen. Die Notation ähnelt dem λ-kalkül: λx. e \x -> e λx. λy. e \x -> \y -> e λx y. e \x y -> e Damit wird der Ausdruck (\x -> 2*x) 3 zu 6 ausgewertet und die vorige Definition von max kann alternativ wie folgt geschrieben werden: 1 max :: Integer -> Integer -> Integer 2 max = \x y -> if x<y then y else x Auch hier erstreckt sich der Wirkungsbereich des λ bis zum Ende des längsten gültigen Terms (cf. Seite 94), d.h., \x -> (f x) \x -> f x (\x -> f) x Stefan Klinger DBIS Informatik 2 Sommer

26 4 Haskell Typen, Werte und einfache Definitionen Listen Listen Listen sind die primäre Datenstruktur in funktionalen Programmiersprachen. Haskell unterstützt die Konstruktion und Verarbeitung homogener Listen beliebigen Typs: Listen von Integer, Listen von Listen, Listen von Funktionen,... Der Typ von Listen, die Elemente des Typs α enthalten, wird mit [α] bezeichnet (gesprochen list of α). Listen sind also immer homogen, d.h. alle Elemente sind vom gleichen Typ. Die Struktur von Listen ist rekursiv: Eine Liste ist entweder leer, notiert als [], genannt nil, oder ein konstruierter Wert aus Listenkopf x (head) und Restliste xs (tail), notiert als x:xs. Der Operator (:) heißt cons 24 24Für list construction. Stefan Klinger DBIS Informatik 2 Sommer

27 4 Haskell Typen, Werte und einfache Definitionen Listen 4.7 Listen-Konstruktion [] und (:) sind Beispiele für data constructors, Funktionen, die Werte eines bestimmten Typs konstruieren. Wir werden dafür noch zahlreiche Beispiele kennenlernen. Jede Liste kann mittels [] und (:) konstruiert werden: Liste, die 1 bis 3 enthält: 1:(2:(3:[])) Der cons-operator ist rechts-assoziativ, also äquivalent: 1:2:3:[] Syntaktische Abkürzung: [e 1,e 2,...,e n ] e 1 :e 2 :...:e n :[] Beispiele [] :: [α] z :[] :: [Char] [[1],[2,3],[]] :: [[Integer]] (False:[]):[] :: [[Bool]] [(<),(<=),(>),(>=)] :: [α -> α -> Bool] [[]] :: [[α]] Natürlich hat auch cons einen Typ: (:) :: α [α] [α]. Stefan Klinger DBIS Informatik 2 Sommer

28 4 Haskell Typen, Werte und einfache Definitionen Listen 4.7 Arithmetische Sequenzen [x..y] wenn x<=y dann [x,x+1,x+2,...,y] sonst [] [x 1,x 2..y] Liste der Werte x 1 bis y mit Schrittweite x 2 -x 1 Für Sequenzen vom Typ [Float] und [Double] ist die Abbruchbedingung y + x 2 x 1 2. Beispiel Der Ausdruck [2.. 6] wird zu [2, 3, 4, 5, 6] ausgewertet, [9, 7.. 2] ergibt [9, 7, 5, 3]. Aber: [0.1, ] [0.1, 0.3, 0.5, 0.7], weil Die Abbruchbedingung kann weggelassen werden, um unendliche Listen zu erzeugen: [1, 5..] [1,5,9,13,17,21,... Stefan Klinger DBIS Informatik 2 Sommer

29 4 Haskell Typen, Werte und einfache Definitionen Listen 4.7 Listen-Dekomposition Mittels der vordef. Funktionen head und tail kann eine nicht-leere Liste x:xs wieder in ihren Kopf und Restliste zerlegt werden: head (x:xs) x tail (x:xs) xs head [] *** Exception: Prelude.head: empty list tail [] *** Exception: Prelude.tail: empty list Die Funktion null :: [α] -> Bool bestimmt ob eine Liste leer ist. null [] True null [1,2,3] False Stefan Klinger DBIS Informatik 2 Sommer

30 4 Haskell Typen, Werte und einfache Definitionen Listen 4.7 Konstanten des Typs String (Zeichenketten) Zeichenketten werden in Haskell durch den Typ [Char] repräsentiert, eine Zeichenkette ist also eine Liste von Zeichen. Funktionen auf Listen können damit auch auf Strings operieren. Haskell kennt String als Synonym für den Typ [Char] (realisiert durch die Deklaration type String = [Char] ( später)). Strings werden in doppelten Anführungszeichen " " notiert. Beispiel "" "AbC" z :[] "z" [ C, u, r, r, y ] "Curry" head "Curry" C tail "Curry" "urry" tail (tail "OK\n") "\n" Stefan Klinger DBIS Informatik 2 Sommer

Grundlegende Datentypen

Grundlegende Datentypen Funktionale Programmierung Grundlegende Datentypen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 14.11.2017 15:37 Inhaltsverzeichnis Typen........................................

Mehr

Funktionale Programmierung Grundlegende Datentypen

Funktionale Programmierung Grundlegende Datentypen Grundlegende Datentypen Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 06.11.2017 16:45 Inhaltsverzeichnis Typen........................................

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Grundlegende Datentypen (Funktionale Programmierung) Prof. Dr. Oliver Braun Letzte Änderung: 18.03.2018 21:08 Grundlegende Datentypen 1/16 Typen in Haskell ist alles streng typisiert Haskell verfügt über

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 26. Oktober 2006 Haskell - Einführung Syntax Typen Auswertung Programmierung

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Grundlegende Datentypen Funktionale Programmierung Prof. Dr. Oliver Braun Letzte Änderung: 22.10.2018 10:53 Grundlegende Datentypen 1/21 Typen in Haskell ist alles streng typisiert Haskell verfügt über

Mehr

HASKELL KAPITEL 2.1. Notationen: Currying und das Lambda-Kalkül

HASKELL KAPITEL 2.1. Notationen: Currying und das Lambda-Kalkül HASKELL KAPITEL 2.1 Notationen: Currying und das Lambda-Kalkül Bisheriges (Ende VL-Teil 1) weite :: (Float,Float) ->Float weite (v0, phi) = (square(v0)/9.81) * sin(2 * phi) (10, 30 ) smaller ::(Integer,

Mehr

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

Funktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I SS 2011 Funktionstypen Funktionen haben einen Datentyp, der folgende allgemeine Form hat: functionname :: T 1 -> T 2, wobei T 1, T 2 wiederum beliebige Datentypen sind Beispiel: T 1 T 2 Der Datentyp

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

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

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

Programmieren in Haskell Einstieg in Haskell

Programmieren in Haskell Einstieg in Haskell Programmieren in Haskell Einstieg in Haskell Peter Steffen Universität Bielefeld Technische Fakultät 24.10.2008 1 Programmieren in Haskell Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke

Mehr

Grundlagen der Programmierung 3 A

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

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 20 Einstieg in die Informatik mit Java Literalkonstanten Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 20 1 Ganzzahlige Konstanten 2 Gleitkommakonstanten 3 Zeichenkonstanten

Mehr

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

Tag 3. Funktionen. Num erfüllen, haben wir... ja, was nun eigentlich? Bei Tag 3 Funktionen Heute werden wir den wichtigsten Typ (oder die wichtigste Klasse von Typen) in Haskell überhaupt genau unter die Lupe nehmen: Funktionen, die wir ansatzweise schon am letzten Tag kennengelernt

Mehr

Theoretische Informatik II

Theoretische Informatik II Theoretische Informatik II Dr. Eva Richter / Holger Arnold Universität Potsdam, Theoretische Informatik, Sommersemester 2008 Übungsblatt 3 (Version 4) Abgabetermin: 13.5.2008, 12.00 Uhr Der λ-kalkül Da

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 30 Einstieg in die Informatik mit Java Datentypen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 30 1 Überblick 2 Ganzzahlige Typen 3 Gleitkommatypen 4 Zeichen, char

Mehr

Variablen, Konstanten und Datentypen

Variablen, Konstanten und Datentypen Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Variablen, Konstanten und Datentypen Überblick

Mehr

ALP I. Funktionale Programmierung

ALP I. Funktionale Programmierung ALP I Funktionale Programmierung Zusammengesetzte Datentypen in Haskell WS 2012/2013 Zusammengesetzte Datentypen Tupel List String Zusammengesetzte Datentypen Tupel-Datentyp Ein Tupel ist eine Ansammlung

Mehr

Grundlagen der Programmierung 3 A

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

Mehr

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

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

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

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

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Literalkonstanten Übersicht 1 Ganzzahlige Konstanten 2 Gleitkommakonstanten 3 Zeichenkonstanten 4 Zeichenketten 5 Boolsche Konstanten 6 null Referenz Literalkonstanten Literalkonstanten

Mehr

Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Kapitel 3. Grunddatentypen, Ausdrücke und Variable Kapitel 3 Grunddatentypen, Ausdrücke und Variable Grunddatentypen, Ausdrücke und Variable 1 Eine Datenstruktur besteht aus Grunddatentypen in Java einer Menge von Daten (Werten) charakteristischen Operationen

Mehr

ALP I. Funktionale Programmierung

ALP I. Funktionale Programmierung ALP I Funktionale Programmierung Typ-Klassen und SS 2011 Überladung von Datentypen Funktionen sollen oft auf verschiedene Datentypen anwendbar sein, aber nicht auf beliebige Datentypen. Beispiel: Die (+)

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie Rev. 2749 1 [28] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 04.11.2014: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2014/15 2 [28] Fahrplan Teil

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

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 s Wochenende Programmieren

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

Informatik I - Programmierung Globalübung Hugs98 Currying. Hugs98 Currying

Informatik I - Programmierung Globalübung Hugs98 Currying. Hugs98 Currying Informatik I - Programmierung Globalübung 13.01.2003 Hugs98 Currying Thomas Weiler Fachgruppe Informatik RWTH Aachen T. Weiler, RWTH Aachen - 1 - Hugs98 Currying Bedienung Typen Fehlermeldungen Inhalt

Mehr

Haskell, Typen, und Objektorientierung

Haskell, Typen, und Objektorientierung Haskell, Typen, und Objektorientierung ZIELE dieses Kapitels Haskells Typisierung Milners Polymorpher Typcheck Haskells Typklassen P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite

Mehr

Teil I. Konzepte imperativer Programmierung

Teil I. Konzepte imperativer Programmierung Teil I Konzepte imperativer Programmierung 34 Abschnitt 2: Imperative Programmierung 2. Imperative Programmierung 2.1 Einleitung 2.2 Grunddatentypen und Ausdrücke 2.3 Imperative Variablenbehandlung 2.4

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

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08 Kapitel 4 Programmierkurs Birgit Engels, Anna Schulze Wiederholung Kapitel 4 ZAIK Universität zu Köln WS 07/08 1 / 23 2 Datentypen Arten von Datentypen Bei der Deklaration einer Variablen(=Behälter für

Mehr

Kapitel 3: Eine einfache Programmiersprache. Programmieren in Haskell 1

Kapitel 3: Eine einfache Programmiersprache. Programmieren in Haskell 1 Kapitel 3: Eine einfache Programmiersprache Programmieren in Haskell 1 Datentypen, Datentypdefinitionen data Instrument = Oboe HonkyTonkPiano Cello VoiceAahs data Musik = Note Ton Dauer Pause Dauer Musik

Mehr

Basiskonstrukte von Haskell

Basiskonstrukte von Haskell Basiskonstrukte von Haskell PD Dr. David Sabel Goethe-Universität Frankfurt am Main 29. September 2015 Basistypen und Operationen Ganzzahlen: Int = Ganzzahlen beschränkter Länge Integer = Ganzzahlen beliebiger

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie 16:02:01 2017-01-17 1 [37] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 08.11.2016: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2016/17 PI3 WS 16/17

Mehr

Kapitel 2: Python: Ausdrücke und Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1

Kapitel 2: Python: Ausdrücke und Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1 Kapitel 2: Python: Ausdrücke und Typen Grundlagen der Programmierung 1 Holger Karl Wintersemester 2016/2017 Inhaltsverzeichnis Inhaltsverzeichnis 1 Abbildungsverzeichnis 2 Liste von Definitionen u.ä. 2

Mehr

Abschnitt 2: Daten und Algorithmen

Abschnitt 2: Daten und Algorithmen Abschnitt 2: Daten und Algorithmen 2. Daten und Algorithmen 2.1 Zeichenreihen 2.2 Datendarstellung durch Zeichenreihen 2.3 Syntaxdefinitionen 2.4 Algorithmen 2 Daten und Algorithmen Einf. Progr. (WS 08/09)

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

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen Kurs C/C++ Programmierung, WS 2008/2009 Dipl.Inform. R. Spurk Arbeitsgruppe Programmierung FR 6.2 Informatik

Mehr

Kapitel 2: Python: Ausdrücke und Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2018/2018. Inhaltsverzeichnis 1

Kapitel 2: Python: Ausdrücke und Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2018/2018. Inhaltsverzeichnis 1 Kapitel 2: Python: Ausdrücke und Typen Grundlagen der Programmierung 1 Holger Karl Wintersemester 2018/2018 Inhaltsverzeichnis Inhaltsverzeichnis 1 Abbildungsverzeichnis 2 Liste von Definitionen u.ä. 2

Mehr

3. Java - Sprachkonstrukte I

3. Java - Sprachkonstrukte I Namen und Bezeichner Ein Programm (also Klasse) braucht einen Namen 3. Java - Sprachkonstrukte I Namen und Bezeichner, Variablen, Zuweisungen, Konstanten, Datentypen, Operationen, Auswerten von Ausdrücken,

Mehr

Elementare Konzepte von

Elementare Konzepte von Elementare Konzepte von Programmiersprachen Teil 1: Bezeichner, Elementare Datentypen, Variablen, Referenzen, Zuweisungen, Ausdrücke Kapitel 6.3 bis 6.7 in Küchlin/Weber: Einführung in die Informatik Bezeichner

Mehr

2.1 Fundamentale Typen

2.1 Fundamentale Typen 2. Elementare Typen 2.1 Fundamentale Typen C++ stellt die wichtigsten Datentypen mit passender Form der Abspeicherung und zugehörigen Rechenoperationen zur Verfügung : Boolscher Datentyp (bool) für logische

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

3 Exkurs: Der λ-kalkül

3 Exkurs: Der λ-kalkül 3 Exkurs: Der λ-kalkül Alonso Churchs λ-kalkül (ca. 1940) ist der formale Kern jeder funktionalen Programmiersprache. Der λ-kalkül ist eine einfache Sprache, mit nur wenigen syntaktischen Konstrukten und

Mehr

WS 2011/2012. Robert Giegerich. October 30, 2013

WS 2011/2012. Robert Giegerich. October 30, 2013 WS 2011/2012 Robert AG Praktische Informatik October 30, 2013 Algebraische Datentypen Neue Datentypen werden als algebraische Datentypen eingeführt. Werte des Datentyps sind Formeln, die aus Konstruktoren

Mehr

Funktionale Programmierung und Typtheorie

Funktionale Programmierung und Typtheorie Funktionale Programmierung und Typtheorie 5. Fortgeschrittene Konzepte 5.1 Komprehensionen 5.2 Partielle Applikationen 5.3 Strikte und nichtstrikte Funktionen 5.4 Unendliche Datenstrukturen und verzögerte

Mehr

3. Java - Sprachkonstrukte I

3. Java - Sprachkonstrukte I Lernziele 3. Java - Sprachkonstrukte I Namen und Bezeichner, Variablen, Zuweisungen, Konstanten, Datentypen, Operationen, Auswerten von Ausdrücken, Typkonversionen Sie kennen die grundlegensten Bausteine

Mehr

Kapitel 05. Datentypen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Kapitel 05. Datentypen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz Kapitel 05 Datentypen Inhalt des 5. Kapitels Datentypen 5.1 Einleitung 5.2 Eingebaute Datentypen Übersicht Die Datentypen char, float und double Standardwerte Operatoren Konversion / Type-Cast Datentyp

Mehr

Java-Applikationen (Java-Programme)

Java-Applikationen (Java-Programme) Java-Applikationen (Java-Programme) Eine erste Applikation: 1 2 3 4 5 6 7 8 9 10 // Quelltext HalloWelt.java // Programm gibt den Text Hallo Welt aus public class HalloWelt public static void main(string[]

Mehr

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders Typisierung Effiziente Programmierung Thomas Schnieders Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg 2018-04-26 Thomas Schnieders Typisierung 1

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

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 29 Einstieg in die Informatik mit Java Weitere Ausdrücke Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 29 1 Überblick 2 Kombinierte Zuweisungsoperatoren 3 Vergleichsoperatoren

Mehr

Einführung in die Funktionale Programmierung mit Haskell

Einführung in die Funktionale Programmierung mit Haskell GHC Typen Funktionen Einführung in die Funktionale Programmierung mit Haskell Erste Schritte, Typen und Funktionen LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität,

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

3. Java - Sprachkonstrukte I

3. Java - Sprachkonstrukte I 84 3. Java - Sprachkonstrukte I Namen und Bezeichner, Variablen, Zuweisungen, Konstanten, Datentypen, Operationen, Auswerten von Ausdrücken, Typkonversionen Namen und Bezeichner 85 Ein Programm (also Klasse)

Mehr

2. Datentypen und Deklarationen

2. Datentypen und Deklarationen 2. Datentypen und Deklarationen Programm = Datenstrukturen+Kontrollstruktur Programme verarbeiten Daten. Daten werden in C durch Datenstrukturen aus verschiedenen Datentypen beschrieben. Es gibt (wie in

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

Workshop Einführung in die Sprache Haskell

Workshop Einführung in die Sprache Haskell Workshop Einführung in die Sprache Haskell Nils Rexin, Marcellus Siegburg und Alexander Bau Fakultät für Informatik, Mathematik und Naturwissenschaften Hochschule für Technik, Wirtschaft und Kultur Leipzig

Mehr

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

Abstrakte Syntax von Prolog (1)

Abstrakte Syntax von Prolog (1) 3. Prolog Syntax 3-1 Abstrakte Syntax von Prolog (1) Abstrakte und konkrete Syntax: Abstrakte Syntax: Nur Datenstrukturen, die der Parser anlegt (z.b. Operatorbaum). Konkrete Syntax: Zeichenketten, die

Mehr

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy PROCESSING EINE ZUSAMMENFASSUNG Created by Michael Kirsch & Beat Rossmy INHALT 1. Typen und Operatoren 1. Datentypen 3. Klassen und Objekte 1. Klassen und Objekte 2. Operatoren 2. Konstruktor 3. Typkonversion

Mehr

Praktische Informatik 3

Praktische Informatik 3 Praktische Informatik 3 Christian Maeder WS 03/04 Vorlesung vom 12.1.2004: Ein/Ausgabe in funktionalen Sprachen Vorlesung vom 12.1.2004: Ein/Ausgabe in funktionalen Sprachen 3 Inhalt Wo ist das Problem?

Mehr

Programmieren in Haskell Das Haskell Typsystem

Programmieren in Haskell Das Haskell Typsystem Programmieren in Haskell Das Haskell Typsystem Peter Steffen Robert Giegerich Universität Bielefeld Technische Fakultät 22.01.2010 1 Programmieren in Haskell Belauscht... Lisa Lista: Ohne Typen keine korrekten

Mehr

Listen und Listenfunktionen. Grundlagen der Programmierung 2 A (Listen) Listen und Listenfunktionen. Listen? Haskell: Listen

Listen und Listenfunktionen. Grundlagen der Programmierung 2 A (Listen) Listen und Listenfunktionen. Listen? Haskell: Listen Listen und Listenfunktionen Grundlagen der Programmierung 2 A (Listen) Haskell: Listen Prof. Dr. Manfred Schmidt-Schauß Listen modellieren Folgen von gleichartigen, gleichgetypten Objekten. Ausdruck im

Mehr

5.3 Auswertung von Ausdrücken

5.3 Auswertung von Ausdrücken 5.3 Auswertung von Ausdrücken Funktionen in Java bekommen Parameter/Argumente als Input, und liefern als Output den Wert eines vorbestimmten Typs. Zum Beispiel könnte man eine Funktion i n t min ( i n

Mehr

Vorsemesterkurs Informatik

Vorsemesterkurs Informatik Stand der Folien: 31. März 2011 Vorsemesterkurs Informatik Sommersemester 2011 Grundlagen der Programmierung in Haskell SoSe 2011 Übersicht 1 Ausdrücke und Typen 2 Funktionen 3 Rekursion 4 Listen 5 Paare

Mehr

11 Fallstudie: Reguläre Ausdrücke

11 Fallstudie: Reguläre Ausdrücke 11 Fallstudie: Reguläre Ausdrücke Mit den bisher eingeführten Sprachelementen von Haskell lassen sich bereits substantielle Projekte realisieren. Dieses Kapitel 1 beschreibt einen algebraischen Datentyp

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

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

Vorsemesterkurs Informatik

Vorsemesterkurs Informatik Vorsemesterkurs Informatik Sommersemester 2011 Grundlagen der Programmierung in Haskell SoSe 2011 Stand der Folien: 30. März 2011 Übersicht 1 Ausdrücke und Typen 2 Funktionen 3 Rekursion Vorkurs Informatik

Mehr

Vorsicht bei redundanten und unvollständigen Matches!

Vorsicht bei redundanten und unvollständigen Matches! Vorsicht bei redundanten und unvollständigen Matches! # let n = 7;; val n : int = 7 # match n with 0 -> "null";; Warning: this pattern-matching is not exhaustive. Here is an example of a value that is

Mehr

Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen:

Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen: Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen: take 1 0 ( f i l t e r ( fn x => x mod 2=0) nat ) ; val it =

Mehr

Java ist statisch typisiert, d.h., Variablen, Ergebnisse von Ausdrücken, etc. haben einen Datentyp, der schon bei der Kompilierung festgelegt wird.

Java ist statisch typisiert, d.h., Variablen, Ergebnisse von Ausdrücken, etc. haben einen Datentyp, der schon bei der Kompilierung festgelegt wird. 5 Mehr Java Java ist statisch typisiert, d.h., Variablen, Ergebnisse von Ausdrücken, etc. haben einen Datentyp, der schon bei der Kompilierung festgelegt wird. Java unterscheidet zwei Arten von Typen:

Mehr

Algorithmen und Datenstrukturen I

Algorithmen und Datenstrukturen I Algorithmen und Datenstrukturen I Einführung in Haskell (I) D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Winter 2009/10, 12. Oktober

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 8. Mai 2007 Listen und Listenfunktionen Listen modellieren Folgen von gleichartigen,

Mehr

Wiederholung, Abbruch von Schleifen, switch-anweisung Datentypen, char, formatierte Ausgabe

Wiederholung, Abbruch von Schleifen, switch-anweisung Datentypen, char, formatierte Ausgabe Informatik Vorlesung 03b Wiederholung, Abbruch von Schleifen, switch-anweisung Datentypen, char, formatierte Ausgabe 12. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik

Mehr

Grundlagen der Programmierung 2 (2.A)

Grundlagen der Programmierung 2 (2.A) Grundlagen der Programmierung 2 (2.A) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 5. Mai 2011 Listen und Listenfunktionen Listen modellieren Folgen von gleichartigen,

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

Universität Konstanz FB Informatik und Informationswissenschaft. Deklarative Programmierung (Declarative Programming)

Universität Konstanz FB Informatik und Informationswissenschaft. Deklarative Programmierung (Declarative Programming) Universität Konstanz FB Informatik und Informationswissenschaft Deklarative Programmierung (Declarative Programming) http://www.inf.uni-konstanz.de/dbis Prof. Dr. Marc H. Scholl Sommersemester 2006 Folien

Mehr

Teil I. Konzepte imperativer Programmierung

Teil I. Konzepte imperativer Programmierung Teil I Konzepte imperativer Programmierung 175 Abschnitt 4: Imperative Programmierung 4. Imperative Programmierung 4.1 Grunddatentypen und Ausdrücke 4.2 Imperative Variablenbehandlung 4.3 Anweisungen,

Mehr

2.2 Einfache Datenstrukturen

2.2 Einfache Datenstrukturen 2.2 Einfache Datenstrukturen Konstante und Variable Die Begriffe "Konstante" und "Variable" haben zunächst auch in der Informatik dieselbe grundsätzliche Bedeutung wie in der übrigen Mathematik. Variablen

Mehr

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit Primitive Datentypen Fließkommazahlen float: Fließkommazahl nach IEEE 754 Standard mit 32 bit Vorzeichen Exponent 8 bit Mantisse 23 bit double: Fließkommazahl nach IEEE 754 Standard mit 64 bit Vorzeichen

Mehr

WS 2013/2014. Robert Giegerich. 11. Dezember 2013

WS 2013/2014. Robert Giegerich. 11. Dezember 2013 WS 2013/2014 Robert AG Praktische Informatik 11. Dezember 2013 höherer Ordnung Worum geht es heute? In Haskell gibt es, die als Argument haben oder als Ergebnis liefern. Diese nennt man höherer Ordnung.

Mehr

Wo sind wir? Übersicht lexikale Struktur von Java

Wo sind wir? Übersicht lexikale Struktur von Java Wo sind wir? Java-Umgebung Lexikale Konventionen Datentypen Kontrollstrukturen Ausdrücke Klassen, Pakete, Schnittstellen JVM Exceptions Java Klassenbibliotheken Ein-/Ausgabe Collections Threads Applets,

Mehr

Grundlagen der Informatik Ergänzungen WS 2007/2008 Prof. Dr. Rainer Lütticke

Grundlagen der Informatik Ergänzungen WS 2007/2008 Prof. Dr. Rainer Lütticke Grundlagen der Informatik Ergänzungen WS 2007/2008 Prof. Dr. Rainer Lütticke 1 Links Stellenwertsysteme mit Links zu Zahlensysteme: http://de.wikipedia.org/wiki/stellenwertsystem ASCII-Code: http://de.wikipedia.org/wiki/ascii

Mehr

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1 Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten

Mehr

Haskell for Hackers... or why functional programming matters

Haskell for Hackers... or why functional programming matters ... or why functional programming matters Franz Pletz CCC München 27-06-2009 @ GPN8 Fahrplan Ablauf Motivation 1 Ablauf Motivation 2 3 4 Ablauf Ablauf Motivation bei Fragen/Unklarheiten:

Mehr

WS 2011/2012. Robert Giegerich. October 17, 2012

WS 2011/2012. Robert Giegerich. October 17, 2012 in in WS 2011/2012 Robert AG Praktische Informatik October 17, 2012 Sprechstunden in GZI-Arbeitsraum (V2-240) Tutoren-Sprechstunden (V2-228) http://www.techfak.uni-bielefeld.de/ags/pi/ lehre/audiws12/#ueb

Mehr

Proinformatik Marco Block Dienstag, den 21. Juli 2009

Proinformatik Marco Block Dienstag, den 21. Juli 2009 2. Skript vom Dienstag, den 21. Juli 2009 zur Vorlesung Proinformatik Marco Block Dienstag, den 21. Juli 2009 1 Verschiedenes 1.1 let und where Am Anfang der Vorlesung haben wir uns ein paar einfache neue

Mehr

2.5 Primitive Datentypen

2.5 Primitive Datentypen 2.5 Primitive Datentypen Wir unterscheiden 5 primitive Datentypen: ganze Zahlen -2, -1, -0, -1, -2,... reelle Zahlen 0.3, 0.3333..., π, 2.7 10 4 Zeichen a, b, c,... Zeichenreihen "Hello World", "TIFI",

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

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

WS 2013/2014. Robert Giegerich. 11. Dezember 2013

WS 2013/2014. Robert Giegerich. 11. Dezember 2013 WS 2013/2014 Robert AG Praktische Informatik 11. Dezember 2013 höherer Ordnung Worum geht es heute? In Haskell gibt es, die als Argument haben oder als Ergebnis liefern. Diese nennt man höherer Ordnung.

Mehr

Funktionale Programmierung

Funktionale Programmierung Monaden LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 30. April 2009 Monaden Eine Monade ist ein Programmier-Schema für sequentielle Berechnungen. In Haskell

Mehr