Algorithmen und Datenstrukturen I

Ähnliche Dokumente
Gliederung. Algorithmen und Datenstrukturen I. Listen in Haskell: Listen in Haskell: Listen in Haskell. Datentyp Liste Strings Listenkomprehension

Programmierparadigmen

Programmierparadigmen

Funktionales Programmieren

Gliederung. Funktionale Programmierung. Pattern matching in Haskell. Pattern matching in ERLANG. Materialien zur Vorlesung

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Algorithmen und Datenstrukturen II

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

ALP I Einführung in Haskell

Beschreibung von Werten: Beschreibung von Werten: (2) Begriffsklärung: (Ausdruck, expression) (2) Begriffsklärung: (Ausdruck, expression)

Grundlagen der Programmierung 2 (1.A)

Grundlagen der Programmierung 2 (1.A)

Haskell. Grundlagen der Programmierung 2. Grundlagen der Programmierung 2 (1.A) Bücher, Literatur, URLs. Haskell. Einführung

Grundlagen der Programmierung 2 (1.A)

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

Operatoren und Ausdrücke

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

Programmieren in Haskell Einführung

Haskell. Grundlagen der Programmierung 2. Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte. Prof. Dr. Manfred Schmidt-Schauß

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

Grundlagen der Programmierung 2 (1.A)

Grundlegende Datentypen

Funktionale Programmierung Grundlegende Datentypen

Gliederung. Algorithmen und Datenstrukturen I. Binäre Bäume: AVL-Bäume. inäre Bäume: AVL Bäume. Abstrakte Datentypen V: AVL Bäume. D.

Grundlagen der Programmierung 3 A

Grundlagen der Programmierung 2

3. Operatoren und Ausdrücke

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

3. Operatoren und Ausdrücke

3. Operatoren und Ausdrücke

Programmieren 1 C Überblick

Grundlagen der Programmierung 3 A

Grundlegende Datentypen

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Datentypen und Operatoren Ganzzahlige Numerische Datentypen Logischer Datentyp

Algorithmen und Datenstrukturen II

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

JAVA-Datentypen und deren Wertebereich

Grundlegende Datentypen

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

3 Einführung in ML. 3.1 Überblick. 3.2 Elementare Datentypen und Funktionen Bezeichner Elementare Datentypen

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

Algorithmen und Datenstrukturen I

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Basiskonstrukte von Haskell

Primitive Datentypen und Felder (Arrays)

Die einfachsten Anweisungen

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

Grundlagen der Programmierung 2

8. Ausdrücke, Operatoren (einfache Typen)

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

Teil II. Datentypen. T. Neckel Einführung in die wissenschaftliche Programmierung IN8008 Wintersemester 2017/

Gliederung. Algorithmen und Datenstrukturen II. Graphen: All-pairs shortest paths. Graphen: All-pairs shortest paths. Graphen: Kürzeste Pfade III

Kapitel 3: Variablen

Algorithmen & Programmierung. Reelle Zahlen in C (1) Darstellung reeller Zahlen

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

Grundlagen der Programmierung 2 (1.A)

Primitive Datentypen in Haskell

Einführung in die Informatik. Processing Numbers. Motivation. Primitive Datentypen. Operatoren versus Methoden

Einführung in die Informatik. Processing Numbers

Gliederung. Algorithmen und Datenstrukturen I. Binäre Bäume: ADT Heap. inäre Bäume: ADT Heap. Abstrakte Datentypen IV. D. Rösner

Modul 122 VBA Scribt.docx

Mathematische Computer-Software

8. Ausdrücke, Operatoren (einfache Typen)

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

Zahl ist der im Gradmaß angegebene Winkel, dessen Sinus Sie berechnen möchten.

Einführung in die funktionale Programmierung

Praktische Informatik 3: Funktionale Programmierung Vorlesung 1 vom : Einführung

Einführung in das Programmieren Prolog Sommersemester Teil 2: Arithmetik. Version 1.0

Crashkurs: Haskell. Mentoring FU Berlin Felix Droop

Algorithmen und Datenstrukturen I

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Vorkurs Informatik WiSe 17/18

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Java I Vorlesung Imperatives Programmieren

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

Funktionale Programmierung mit Haskell

Grundlagen der Informatik 2. Operatoren

Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Informatik I Processing Numbers. Cyrill Stachniss Wolfram Burgard

Gliederung. Algorithmen und Datenstrukturen II. Java: Objektorientierung. Java: Objektorientierung. Objektorientierung in JAVA. D.

Algorithmen und Datenstrukturen II

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

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

Kapitel 6: Typprüfung

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

Dipl.-Volksw. Markus Pullen Wintersemester 2012/13

Vorsemesterkurs Informatik

Variablen, Konstanten und Datentypen

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

Transkript:

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 2009, c 2009/10 D.Rösner D. Rösner AuD I 2009/10... 1

Gliederung D. Rösner AuD I 2009/10... 2

Programmiersprache Haskell: benannt nach Haskell B. Curry einer der Pioniere des λ-kalkül erste Spezifikation der Sprache Ende 80er Jahre aktuelle Version: Haskell 98 Download, Tutorials, usw.: http://www.haskell.org/ einige Bücher (Auswahl): [Tho99], [Bir00] [CK02] D. Rösner AuD I 2009/10... 4

Haskell Programmierumgebung Hugs Haskell Users Gofer System frei erhältlicher Interpreter für alle gängigen Plattformen D. Rösner AuD I 2009/10... 5

Haskell Elementarer Einstieg verwende Hugs als Taschenrechner Grundrechenarten: Addition: + Subtraktion: - Multiplikation: Division: * ganzzahlig: div Gleitkomma: / Exponentiation: ^ Beachte: es gelten die üblichen Vorrangregeln (Präzedenzregeln) ansonsten: Verwenden von Klammern D. Rösner AuD I 2009/10... 6

funktionale Programme in Haskell Definitionen von Funktionen und anderen Werten durch Gleichungen Definition assoziiert Namen (Identifikator) mit Wert eines bestimmten Typs Syntax: <name> :: <type> <name> = <expression> D. Rösner AuD I 2009/10... 7

funktionale Programme in Haskell cont. lies :: als hat Typ oder ist vom Typ Beispiele: size :: Int size = 12 + 13 square :: Int -> Int square n = n * n D. Rösner AuD I 2009/10... 8

Haskell Typisierung: jedes Objekt in Haskell hat einen wohldefinierten Typ Zweck der Typisierung: frühzeitiges Erkennen von Programmierfehlern (type checking) schon vor Programmausführung (statische Analyse) D. Rösner AuD I 2009/10... 10

Haskell vordefinierte elementare Typen (auch Sorten genannt) für Konstante (= nullstellige Funktionen): Bool Int Char Float Integer Rational Double Vorschau: durch Deklaration mit type lassen sich benutzerdefinierte Typen einführen D. Rösner AuD I 2009/10... 11

Zur Unterscheidung zwischen Int und Integer Zur Klasse Int gehören ganze Zahlen, die sich mit einer festen Zahl von Bytes darstellen lassen. der Wert der Variablen maxbound::int gibt die grösste als Int darstellbare ganze Zahl an. Dieser Wert ist (bei Hugs for Windows) 2147483647. Will man beliebig grosse ganze Zahlen verarbeiten, so sollte man den Typ Integer verwenden. D. Rösner AuD I 2009/10... 12

Typisierung cont. Typ von Funktionen (auch Funktionalität genannt) : Definitions- und Wertebereich durch -> getrennt angegeben Beispiel: double :: Int -> Int double n = 2*n bei mehreren Argumenten werden deren Typen durch -> verbunden Beispiel: max mit 2 Argumenten aus Int und Wert aus Int max :: Int -> Int -> Int D. Rösner AuD I 2009/10... 13

Typisierung cont. Interpretation einer Typdeklaration wie scale :: Picture -> Int -> Picture erstens: scale hat zwei Argumente: das erste ist vom (nutzerdefinierten) Typ Picture, das zweite vom (vordefinierten) Typ Int zweitens: das Ergebnis der Anwendung von scale ist vom Typ Picture D. Rösner AuD I 2009/10... 14

vordefinierte arithmetische Operatoren +... Summe zweier Zahlen *... Produkt zweier Zahlen ˆ... Exponentiation: 2 ˆ 3 gibt 8 -... Differenz, wenn infix verwendet; umgekehrtes Vorzeichen bei Präfixverwendung (vgl. negate) D. Rösner AuD I 2009/10... 15

vordefinierte arithmetische Operatoren cont. div... ganzzahlige Division mod... Rest bei ganzzahliger Division (modulo) abs... Absolutbetrag negate... ändere Vorzeichen D. Rösner AuD I 2009/10... 16

vordefinierte Vergleichsoperatoren für ganze Zahlen, d.h. Typ Int -> Int -> Bool: >, >=, ==, / =, <=, < diese Vergleichsoperatoren sind wie auch die arithmetischen Operatoren überladen und auch auf Float anwendbar Typ dann: Float -> Float -> Bool für == gilt auch Bool -> Bool -> Bool bzw. sogar allgemein t -> t -> Bool, sofern für den Typ t Gleichheit definiert (Hinweis: t hier sog. Typvariable) D. Rösner AuD I 2009/10... 17

einige vordefinierte Operatoren bzw. Konstanten für Float Name(n) Typ Bem. + - * / Float -> Float -> Float ˆ Float -> Int -> Float x n ** Float -> Float -> Float x y exp Float -> Float e x log Float -> Float ln x logbase Float -> Float -> Float log a x pi Float π signum Float -> Float sqrt Float -> Float cos, sin, tan Float -> Float acos, asin, atan Float -> Float ceiling, floor, round Float -> Int Rundung fromint Int -> Float Konversion D. Rösner AuD I 2009/10... 18

Operatoren werden infix verwendet, d.h. 3 + 4 aber: Verwendung eines Operatorsymbols <op> in Präfixposition möglich mit Notation (<op>), d.h. (+) 3 4 == 3 + 4 können assoziativ sein; z.b. +, * nicht-assoziative Operatoren werden festgelegt als links-assoziativ oder rechts-assoziativ z.b. - links-assoziativ, d.h. a - b - c == (a - b) - c D. Rösner AuD I 2009/10... 19

Operatoren Operatoren haben Bindungsstärke oder Fixität (engl. fixity) z.b. * hat Fixität 7, + hat 6, ˆ hat 8, daher a + b * c == a + (b * c) und a ˆ b * c == (a ˆ b) * c D. Rösner AuD I 2009/10... 20

Operatoren und Funktionen Funktionsanwendung hat höchste Bindungsstärke allgemeine Schreibweise: Funktionsname vor Argument(e) f v 1 v 2...v n Beachte: da Funktionsanwendung höhere Bindung als jeder andere Operator, wird f n+1 interpretiert als (f n)+1 für andere Interpretation ist explizite Klammerung notwendig: f (n+1) D. Rösner AuD I 2009/10... 21

Konversionen von Operatoren und Funktionen werden Infix-Operatoren in Klammern eingeschlossen, so können sie als Funktionen vor ihren Argumenten verwendet werden Beispiel: (+) :: Int -> Int -> Int Beispiel:Verwendung: (+) a b == a + b Funktionen können zu Operatoren gemacht werden durch Einschluss des Funktionsnamen in sog. Backquotes a max b == max a b D. Rösner AuD I 2009/10... 22

zwei Arten von Dateistilen: (Extension.hs ): alles ist Programmtext, sofern nicht explizit als Kommentar gekennzeichnet Kommentare bis Zeilenende eingeleitet durch zwei aufeinanderfolgende - Abschnittskommentare zwischen {- und -} D. Rösner AuD I 2009/10... 24

zwei Arten von Dateistilen: cont literate (Extension.lhs ): alles ist Kommentar, sofern nicht am Zeilenanfang durch > als Programmzeile gekennzeichnet literat... wörtlich D. Rösner AuD I 2009/10... 25

Beispiel eines Skripts {-... mehrere Zeilen Kommentartext... -} -- Berechnung der Fakultät mit Konditional if fak :: Int -> Int fak n = if n == 0 then 1 else n * fak (n - 1) D. Rösner AuD I 2009/10... 26

Beispiel eines literaten Skripts Die Berechnung der Funktion Fakultät ist ein Standardbeispiel fuer Rekursion. > fak :: Int -> Int > fak n = if n == 0 then 1 else n * fak (n - 1) Eine Variante mit Pattern-Matching: > fak 0 = 1 > fak n = n * fak (n - 1) D. Rösner AuD I 2009/10... 27

Literatur: I Richard Bird. Introduction to functional programming using Haskell. Prentice Hall Europe, 2000. ISBN 0-13-484346-0; 2nd edition. Manual M. Chakravarty and Gabriele C. Keller. An Introduction to Computing with Haskell. Pearson Education Australia, 2002. ISBN 1 74009 404 2; also available in German translation. Simon Thompson. Haskell - The Craft of Functional Programming. Addison Wesley Longman Ltd., Essex, 1999. 2nd edition, ISBN 0-201-34275-8; Accompanying Web site: http://www.cs.ukc.ac.uk/people/staff/sjt/craft2e. D. Rösner AuD I 2009/10... 28

Literatur: II D. Rösner AuD I 2009/10... 29