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

Ähnliche Dokumente
Programmieren in Haskell Einführung

Einführung in Haskell und seine Werkzeuge

Vorsemesterkurs Informatik

Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 4A

Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 4A

Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 5A. Lösung zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler)

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

Vorsemesterkurs Informatik

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

Einführung in die Funktionale Programmierung mit Haskell

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

Grundlegende Datentypen

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

Funktionales Programmieren

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

Grundlagen der Programmierung 3 A

Algorithmen und Datenstrukturen I

Grundlegende Datentypen

Grundlagen der Programmierung 3 A

Basiskonstrukte von Haskell

Funktionale Programmierung Grundlegende Datentypen

ALP I Einführung in Haskell

Datentypen: integer, char, string, boolean

Vorsemesterkurs Informatik

Kapitel 3. Funktionale Programmierung in OCAML. Informatik I WS03/04 Martin Hofmann 90

Grundlegende Datentypen

Programmieren in Haskell Einstieg in Haskell

Programmieren in Haskell

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

Primitive Datentypen in Haskell

: Funktionen höherer Ordnung. III.6 Funktionale Programmiertechniken - 1 -

Hallo Haskell. Funktionale Programmierung. Prof. Dr. Oliver Braun Letzte Änderung: :06. Hallo Haskell 1/23

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

Hallo Haskell. (Funktionale Programmierung) Prof. Dr. Oliver Braun. Letzte Änderung: :08. Hallo Haskell 1/23

Haskell for Hackers... or why functional programming matters

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

Funktionale Programmierung mit Haskell. Jan Hermanns

Programmierung und Modellierung

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

Programmieren in Haskell Einführung

Lösungen zum Übungsblatt 3: Softwareentwicklung I (WS 2006/07)

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

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1

Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 1B

Standard.lib. Inhalt. WAGO-I/O-PRO 32 Bibliothek

Grundlagen der Programmierung

Programmieren in Haskell

Beispiele: Funktionsabstraktion (3) Funktionsdeklaration. Funktionsdeklaration (2) Funktionsdeklaration (3) 3. Abstraktion über Funktionsbezeichner:

Vorsemesterkurs Informatik

ALP I. Funktionale Programmierung

5.3 Auswertung von Ausdrücken

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

Einführung in die funktionale Programmierung

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

Haskell, Typen, und Objektorientierung

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

Variablen, Konstanten und Datentypen

WS 2011/2012. Georg Sauthoff 1. November 11, 2011

ALP I. Funktionale Programmierung

Java I Vorlesung Imperatives Programmieren

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

Grundlagen der Programmierung

Verwenden Sie für jede Aufgabe die C++ IDE von Eclipse (pro Aufgabe ein Projekt).

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

Berechnungsschemata: Funktion als Parameter abstrahiert Operation im Schema, wird bei Aufruf des Schemas konkretisiert

Grundlagen der Programmierung 2 (1.A)

Grundprinzipien der funktionalen Programmierung

Funktionale Programmierung mit Haskell

5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?)

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

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 2016/2017. Inhaltsverzeichnis 1

Einführung in die Funktionale Programmierung mit Haskell

Crashkurs: Haskell. Mentoring FU Berlin Felix Droop

Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Einführung in die Programmierung

Typ-Polymorphismus. November 12, 2014

Vorsemesterkurs Informatik

Vorsemesterkurs Informatik

Vorsemesterkurs Informatik

Die Programmiersprache C

ProInformatik: Funktionale Programmierung. Punkte

Übungsblatt 1. Java Vorkurs (WS 2017)

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

Anwendung (2. Versuch:-) Entkopplung der Locks

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

Zur Benutzung von Haskell-Interpretern

Programmieren in Haskell Das Haskell Typsystem

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

Algorithmen zur Datenanalyse in C++

Transkript:

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 T. Weiler, RWTH Aachen - 2 -

Verwendung des Hugs98 Interpreters Der Interpreter erwartet nach dem Start als Eingabe einen auszuwertenden Ausdruck oder ein Kommando Prelude> 42 42 Prelude> 4 * 11 2 42 Prelude> sqrt 2 1.41421 Prelude> max 3-5 ERROR Prelude> max 3 (-5) 3 Fehler! T. Weiler, RWTH Aachen - 3 - Kommandos - 1 Wichtig: Jedes Kommando startet mit einem Doppelpunkt! :load <filenames> Lädt ein Modul aus der angegebenen Datei :load Entlädt alle Dateien außer prelude :also <filenames> Liest weitere Module :reload :edit <filename> :edit :type <expr> Wiederholt das letzte load Kommando Öffnet die angegebene Datei im Editor Öffnet das zuletzt geladene Modul im Editor Gibt den Typ des Ausdrucks aus T. Weiler, RWTH Aachen - 4 -

Kommandos 2 :? :set <options> :set :find <name> :!command :cd dir :gc :version :quit Gibt eine Liste der Kommandos aus Setzt Kommandozeilenoptionen Gibt eine Hilfe zu den Kommandozeilenoptionen aus Öffnet das Modul im Editor, welches die Definition von <name> enthält Führt command in einer BS-Shell aus Wechselt das aktuelle Verzeichnis Erzwingt eine garbage collection Gibt die Version des Interpreters aus Beendet den Interpreter T. Weiler, RWTH Aachen - 5 - Kommandozeilenoptionen Eingabeformat :set [+ -]<schalter> Beispiel: Prelude>3+4 7 Prelude>:s +t Prelude>3+4 7 :: Integer t Gib Typ nach der Berechnung aus f Beende die Auswertung bei Auftreten eines Fehlers k Gibt etwas verständlichere/längere Fehlermeldungen aus Umgebungsvariablen: pstr Setzt den Eingabeprompt auf str Pstr Setzt den Suchpfad für Module auf str Estr Setzt den Editor auf str Beispiel: :set +Enotepad + oder ist egal, muss aber angegeben werden T. Weiler, RWTH Aachen - 6 -

Sammlung von Definitionen Haskell-Programm Bezeichner von Funktionen und Variablen müssen mit einem Kleinbuchstaben beginnen Einzeiliger Kommentar: -- Dies ist ein einzeiliger Kommentar Mehrzeiliger Kommentar: {- Dies ist ein mehrzeiliger Kommentar -} T. Weiler, RWTH Aachen - 7 - Haskell und Typen Haskell ist stark getypt, d.h. zur Laufzeit können keine Fehler durch Anwendung von Funktionen auf Argumente des falschen Typs entstehen Die Typen aller Ausdrücke sind zur Übersetzungszeit bekannt (statisches Typsystem). Basistypen, z.b. Bool, Int, Char Funktionstypen, z.b. even :: Int -> Bool Der Typ einer selbstdefinierten Funktion kann jedoch auch in einer Typdeklaration angegeben werden Interpreter überprüft, ob die Funktion wirklich den deklarierten Typ hat Erhöht die Verständlichkeit für den Leser Bei Typfehlern sind die Fehlermeldungen aussagekräftiger T. Weiler, RWTH Aachen - 8 -

Wahrheitswerte Zahlen Vordefinierte Typen - 1 Typ: Bool Werte: False, True Funktionen: (&&) :: Bool -> Bool -> Bool Infixoperatoren ( ) :: Bool -> Bool -> Bool not :: Bool -> Bool Vergleichsoperatoren existieren für alle vordefinierten Typen (außer Funktionen): <, <=, == (gleich), >=, >, /= (ungleich) Typen: Int, Integer, Float, Double, Rational, Complex Float, Complex Double, Einige Funktionen: Zahlen: +, -, *, negate, abs, signum Int, Integer: div, mod, even, odd Real, Double: exp, log, sqrt, sin Int: beschränkte Genauigkeit (32 bit) Integer: unbeschränkte Genauigkeit Float: einfache Genauigkeit Double: doppelte Genauigkeit T. Weiler, RWTH Aachen - 9 - Zeichen Vordefinierte Typen - 2 Typ: Char Werte in einfachen Anführungszeichen. Beispiele: a, 4, \n (newline) Einige Funktionen: ord :: Char -> Int chr :: Int -> Char isdigit, isupper :: Char -> Bool toupper, tolower :: Char -> Char Zeichenketten Typ: String (identisch mit [Char]) Werte: z.b. Hallo Einige Funktionen: reverse :: String -> String error :: String -> a error Fehlermeldung hat beliebigen Typ. Führt zum Abbruch der Berechnung und Ausgabe der Fehlermeldung T. Weiler, RWTH Aachen - 10 -

Listen Listen sind die zentralen Datenstrukturen in funktionalen Programmen. Eine Liste ist eine Folge von Werten des gleichen Typs. Tupel: Typen der Elemente können verschieden sein. Beispiel: (1, a, True) :: (Int, Char, Bool) Funktionen mit Listen: (++) :: [a] -> [a] -> [a] verbindet zwei Listen head, last :: [a] -> a erstes/letztes Element der Liste tail, init :: [a] -> [a] Rest/vorderer Teil der Liste length :: [a] -> Int Listenlänge (!!) :: [a] -> Int -> a n-tes Elements; Start bei 0 T. Weiler, RWTH Aachen - 11 - Fehlermeldungen Fehlermeldungen in Hugs helfen nicht immer unbedingt bei der Fehlersuche (http://www.cs.kent.ac.uk/people/staff/sjt/craft2e/errors/allerrors.html) Beispiele: > 3 div 4 ERROR - Undefined variable " div > 3 div 4 ERROR - Improperly terminated character constant Problem: Wird eine Funktion als Infix-Operator verwendet, so muss der Name in Backquotes (Accent grave) eingeschlossen werden. plus :: a -> a -> a plus x y = x + y ERROR "Test.hs":22 - Inferred type is not general enough *** Expression : plus *** Expected type : a -> a -> a *** Inferred type : Int -> Int -> Int Problem: Der Typ der Funktion (Int -> Int -> Int) ist eingeschränkter als der deklarierte Typ (a -> a -> a) T. Weiler, RWTH Aachen - 12 -

Currying - 1 In der Mathematik werden Argumente einer Funktion meistens zu einem Tupel zusammengefasst Beispiel (Potenzierung): power(basis, exponent) = basis exponent Eine curried Function verbraucht im allgemeinen das erste Argument und liefert wiederum eine Funktion, die das zweite Argument verbraucht usw. Beispiel (Potenzierung): (power(basis))(exponent) = basis exponent T. Weiler, RWTH Aachen - 13 - Currying - 2 Currying ist eine Operation, die auf eine Funktion angewendet wird, welche mehr als ein Argument hat. Das Ergebnis der Currying Operation angewendet auf eine Funktion f(x,y) ist eine Funktion (g(x))(y), so dass gilt: f(x, y) = ( (g(x)) (y) ) Nutzen: Insbesondere bei der Verwendung von Funktionen höherer Ordnung (Funktionen, mit Funktionen als Argumente) Beispiel: Zu allen Elementen einer Liste 3 addieren T. Weiler, RWTH Aachen - 14 -

Geboren: 12. September 1900, Massachusetts Gestorben: 1. September 1982, Pennsylvania Haskell Brooks Curry Studierte in Harvard Promovierte in Göttingen bei Hilbert über Grundlagen der kombinatorischen Logik Lehrte in Harvard, Princeton und Pennsylvania State University 1966 Chair of mathematics in Amsterdam T. Weiler, RWTH Aachen - 15 -