Proinformatik Marco Block Dienstag, den 21. Juli 2009
|
|
- Victor Maurer
- vor 5 Jahren
- Abrufe
Transkript
1 2. Skript vom Dienstag, den 21. Juli 2009 zur Vorlesung Proinformatik Marco Block Dienstag, den 21. Juli Verschiedenes 1.1 let und where Am Anfang der Vorlesung haben wir uns ein paar einfache neue Schlüsselwörter angekuckt let und where. Damit kann man sich in einer Funktion lokal Sachen merken, oder Hilfsfunktionen definieren. Die mit let oder where definierten Sachen, sind außerhalb der Funktion nicht sichtbar. Sie sind nützlich, wenn man komplizierte Berechnungen nicht mehrfach ausführen möchte, oder wenn man einen komplizierten Ausdruck in einfachere Teilausdrücke zerlegen möchte. f x = y * y where y = g x e i n e k o m p l i z i e r t e B e r e c h n u n g o d e r f x = l e t y = g x in y * y auch H i l f s f u n k t i o n e n l a s s e n s i c h d e f i n i e r e n f x = y * y where y = g x g a = 2 * a man k o e n n t e s t a t t a auch x s c h r e i b e n d a s w a e r e a b e r e i n b i s s c h e n v e r w i r r e n d 1.2 Funktionskomposition Wenn man sich mehrere Funktionen geschrieben hat, die jeweils ein Teilproblem lösen, kann man sie durch Funktionskomposition zusammenstecken. Wenn wir zum Beispiel eine Funktion schreiben wollen, die feststellt, ob eine Liste ein Element enthält, das kleiner ist, als alle anderen, könnten wir zuerst die Liste sortieren, dann das erste Element rausholen und dann damit vergleichen sort l =... s o r t i e r t d i e L i s t e kopf l =... g i b t den Kopf d e r L i s t e z u r u e c k istkleiner a b = a < b wahr wenn a < b i s t kleineralsalle a liste = istkleiner a ( kopf ( s o r t liste )) Je mehr Funktionen man ineinander steckt, desto mehr Klammern sammeln sich rechts. Das ist nicht so schön, deswegen gibt es etwas alternative Syntax:
2 kleineralsalle a list = istkleiner a $ kopf $ s o r t liste m i t D o l l a r kleineralsalle a list = ( istkleiner a. kopf. s o r t ) liste m i t. O p e r a t o r kleineralsalle a list = istkleiner a. kopf. s o r t $ liste 1.3 Wildcards Wenn uns mache Parameter unserer Funktion gar nicht interessieren, können wir einen Unterstrich _ benutzen. Er passt auf alle Werte, das pattern-match mit _ gelingt also immer. Man kann zum Beispiel das logische Oder so definieren oder True _ = True oder _ True = True oder = False Wenn das erste Argument schon True ist, brauchen wir uns das zweite gar nicht mehr ansehen und umgekehrt. Wenn weder das erste noch das zweite Argument True waren, dann interessieren uns die Argumente gar nicht und wir geben gleich False zurück. 1.4 Typvariablen Wenn man Funktionen schreibt, möchte man meistens, dass sie für möglichst viele Typen funktionieren. Wenn man zum Beispiel eine Funktion schreibt, die die Elemente einer Liste umgekehrt in eine neue Liste schreibt, dann interessiert man sich nicht so sehr für den Typen der Elemente. Weil man aber trotzdem jeder Funktion einen Typen geben muss, gibt es in Haskell die Möglichkeit Typvariablen zu benutzen. Man schreibt einfach statt richtiger Typen kleine Buchstaben in seine Typdefinitionen Der I d e n t i t a e t s f u n k t i o n i s t d e r Typ e g a l H a u p t s a c h e e s kommt d e r s e l b e Typ r a u s, w i e man r e i n s t e c k t d a h e r a > a id :: a -> a id x = x Dabei ist es wichtig zu bemerken, dass gleiche Typvariablen auch mit gleichen Typen belegt werden. Haben wir eine hypothetische Funktion hypo :: a -> a -> b -> c Dann ist es wohlgetypt, wenn für die a der selbe Typ eingesetzt wird. hypo 1 2 c ok ( I n t, I n t, Char ) f u e r ( a, a, b ) hypo a 1 c n i c h t ok ( Char, I n t, Char ) f u e r ( a, a, b ) hypo ok! a und b koennen auch den g l e i c h e n Typen b e z e i c h n e n 2 Eigene Datentypen Damit man Objekte aus der Wirklichkeit abbilden kann, oder den Komfort bei Programmieren erhöht, kann man sich eigene Datentypen definieren. Zum Beispiel kann man sich alternative Bool sche Werte definieren:
3 data Boolean = T F Ein Boolean ist entweder ein T oder ein F. Dabei geben wir dem Computer nur die Namen vor, die Semantik müssen wir uns selbst überlegen. Genau so gut könnten wir Boolean auch anders nennen: data MacGyver = Chuck Norris Diesen Datentypen könnten wir auch für Bool sche Werte benutzen. Die Semantik geben wir vor. Wenn wir bereits definierte Typen für unsere eigenen Datentypen benutzen wollen, können wir das einfach machen. Wir können uns zum Beispiel eine Box definieren, in die man Int Werte reinstecken kann. data Box = B Int d e r I n t v e r s t e c k t s i c h h i n t e r dem B unbox :: Box -> Int h o l t den Wert a u s d e r Box unbox (B n) = n a u f den T y p k o n s t r u k t o r e n kann man p a t t e r n matches machen putinbox :: Int - > Box putinbox n = B n Natürlich ist es blöd, wenn man jetzt für jeden Typen eine extra Box definieren müsste. Glücklicherweise können wir auch bei der Typdefinition Typvariablen einsetzen. Wenn es uns nicht interessiert, welche Typen in der Box stecken, schreiben wir einfach ein a hin. data Box a = B a unbox :: Box a -> a unbox (B x) = x putinbox :: a - > Box putinbox x = B x Wir können auch mehr als eine Typvariable einsetzen. Wenn wir uns zum Beispiel einen eigenen Tupeltyp definieren wollen, können wir das so machen: data Paar a b = P a b Wir benutzen zwei Typvariablen, damit wir Paare mit unterschiedlichen Elementen haben können. Jetzt können wir uns Funktionen definieren, die uns das erste und das zweite Element aus einem Paar zurückgeben. erstes :: Paar a b - > a erstes (P a _) = a zweites :: Paar a b - > b zweites (P _ b) = b In Haskell gibt es eine relativ große Menge von Typen schon vordefiniert. Zum Beispiel Etwa f u e r F u n k t i o n e n, d i e F e h l e r w e r t e z u r u e c k g e b e n koennen data Either a b = Le f t a Right b
4 Etwa f u e r F u n k t i o n e n, d i e n i c h t immer e r f o l g r e i c h s i n d ( Suchen im T e l e f o n b u c h zum B e i s p i e l ) data Maybe a = Just a Nothing 2.1 Beispiel: Natürliche Zahlen Man kann die natürlichen Zahlen über die Peano Axiome (s. Wikipedia) definieren. Man sagt, Null ist eine natürliche Zahl und jeder Nachfolger einer natürlichen Zahl ist wieder eine natürliche Zahl. Genau das kann man auch als Typ in Haskell vereinbaren: data Nat = Zero Succ Nat Damit kann man dann rechnen: plus :: Nat -> Nat -> Nat plus n Zero = n Wenn w i r 0 a d d i e r e n, a e n d e r t s i c h n i x a n s o n s t e n machen w i r von d e r r e c h t e n Z a h l e i n Succ ab und haengen e s an d i e l i n k e Z a h l r a n R e k u r s i o n s i d e e n+m = ( n+1) + (m 1) plus n ( Succ m) = plus ( Succ n) m minus :: Nat -> Nat -> Nat minus n Zero = n 0 a b z i e h e n a e n d e r t n i x minus Zero _ = Zero w i r haben k e i n e n e g a t i v e n Zahlen, 0 x = 0 a n s o n s t e n von b e i d e n Werten e i n Succ ab machen R e k u r s i o n s i d e e n m = ( n 1) (m 1) minus ( Succ n) ( Succ m) = minus n m mal :: Nat -> Nat -> Nat mal n Zero = Zero i r g e n d w a s 0 = 0 a n s o n s t e n : R e k u r s i o n s i d e e n m = n + ( n (m 1) ) mal n ( Succ m) = plus n ( mal n m) hoch :: Nat -> Nat -> Nat hoch n Zero = Succ Zero i r g e n d w a s ˆ0 = 1 a n s o n s t e n : R e k u r s i o n s i d e e nˆm = n ( n ˆ(m 1) ) hoch n ( Succ m) = mal n ( hoch n m) Damit wir ein bisschen komfortabler arbeiten können schreiben wir uns außerdem noch Funktionen, die von den normalen Ints zu unseren Nats konvertieren fromint :: Integer - > Nat fromint 0 = Zero fromint n = Succ ( fromint ( n -1) ) toint :: Nat -> Integer toint Zero = 0 toint ( Succ n) = 1+ toint n
5 2.2 Beispiel: Listen Genau so, wie wir uns natürliche Zahlen definiert haben, können wir uns auch Listen definieren. Die Definitionen unterscheiden sich kaum. In Listen sind einfach noch Elemente drin { e n t w e d e r l e e r ( N i l ), o d e r e i n E l e m e n t und e i n e R e s t l i s t e ( Cons a ( L i s t a ) ) } data List a = Nil Cons a ( List a) Mit dieser Definition können wir jetzt alle möglichen Operationen auf Listen definieren: nimm d a s e r s t e E l e m e n t a u s e i n e r L i s t e r a u s g i b n i x ( N o t h i n g ) z u r u e c k, wenn d i e L i s t e l e e r war kopf :: List a -> Maybe a kopf ( Cons a _) = Just a kopf Nil = Nothing l a s s d a s e r s t e E l e m e n t a u s d e r L i s t e weg schwanz :: List a -> List a schwanz ( Cons _ rest ) = rest { g i b d a s l e t z t e E l e m e n t d e r L i s t e z u r u e c k } letztes :: List a -> a letztes ( Cons a Nil ) = a { wenn n u r noch e i n s d r i n i s t, s i n d w i r d u r c h } letztes ( Cons _ rest ) = letztes rest { a n s o n s t e n d a s e r s t e w e g l a s s e n und d a s l e t z t e vom R e s t nehmen } l a s s d a s l e t z t e E l e m e n t d e r L i s t e weg ohneletztes :: List a -> List a ohneletztes ( Cons _ Nil ) = Nil wenn n u r noch e i n s d r i n i s t, l e e r e L i s t e l i e f e r n a n s o n s t e n d a s e r s t e E l e m e n t an d i e L i s t e r a n h a e n g e n, d i e beim r e k u r s i v e n A u f r u f e n t s t e h t ohneletztes ( Cons a rest ) = Cons a ( ohneletztes rest ) w i e d e r h o l e e i n E l e m e n t u n e n d l i c h o f t i n e i n e r u n e n d l i c h e n L i s t e wiederhole :: a -> List a wiederhole x = Cons x ( wiederhole x) nimm n E l e m e n t e a u s e i n e r L i s t e r a u s nimm :: List a -> Int -> List a nimm _ 0 = Nil wenn w i r k e i n e E l e m e n t haben w o l l e n > l e e r e L i s t e a n s o n s t e n d a s e r s t e E l e m e n t an d i e L i s t e r a n h a e n g e n, d i e e n t s t e h t wenn w i r n 1 E l e m e n t e von d e r R e s t l i s t e g r e i f e n nimm ( Cons a rest ) n = Cons a ( nimm rest ( n -1) ) Es stellt sich heraus, dass diese Listen praktisch identisch sind, zu den Listen, die man in Haskell schon eingebaut bekommt. Sie benutzen einfach ein bisschen schickere Syntax, weil es ja nicht so nett ist, wenn man so viele Cons tippen muss. Das folgende wäre die Listendefinition, wenn wir als Programmierer auch die schicke Syntax benutzen dürften:
6 data [a] = [] a:[a] Man kann sich leicht überlegen, wie die ganzen Funktionen für List a umgeschrieben werden können für [a]. 3 Typklassen Wir haben schon gelernt, wie man seine Funktionen mit Typvariablen für alle Typen definiert, nicht nur für einen bestimmten. Manchmal kann man aber eine Funktion nicht sinnvoll für alle Typen schreiben, man möchte die erlaubten Typen einschränken. Beispielsweise kann man nicht das Minimum aus einer Liste bestimmen, wenn man gar keine Ordnungsrelation auf den Objekten in der Liste hat. Zu diesem Zweck gibt es Typklassen. Typklassen definieren eine Menge von Funktionen, die auf einem Typen definiert sein müssen, damit er Mitglied dieser Typklasse werden kann. Man definiert sie so: { Typen, d i e i n M y c l a s s r e i n w o l l e n, muessen e i n e F u n k t i o n f o o mit dem g e f o r d e r t e n Typen b e r e i t s t e l l e n } c l a s s Myclass a where foo :: a -> Int Man kann jetzt zum Beispiel unseren Boolean Typen von ganz oben zu einer Instanz dieser Klasse machen instance Myclass Boolean where w i r muessen j e t z t e i n f o o angeben foo T = 1 foo F = 0 Es ist auch möglich schon default Implementierungen für die Funktionen einer Klasse anzugeben, damit man nicht alle implementieren muss. c l a s s Myclass2 a where ja :: a -> Bool nein :: a -> Bool ja = not nein nein = not ja Wenn man weder ja noch nein definiert, dann sind beide Funktionen Endlosschleifen, die sich immer gegenseitig aufrufen. Es reicht aber eine von beiden zu überschreiben, weil die andere dann automatisch definiert ist. Man kann aber auch beide überschreiben, wenn man mag. Es gibt einen ganzen Haufen vordefinierter Typklassen. Die interessantesten sind Show -- Werte zu Strings machen Read -- Strings zu Werten machen Eq -- Werte die auf Gleichheit getestet werden können Ord -- Werte mit totaler Ordnung Für weitere werfe man einen Blick in den Haskell 98 Report Unter anderem findet sich dort auch die Typklasse Num für Zahlentypen. Wir können Nat zu einer Instanz dieser Klasse machen. Dazu müssen wir nur die Rechenoperationen, frominteger, abs und signum definieren.
7 instance Num Nat where n + m = plus n m n - m = minus n m n * m = mal n m signum Zero = 0 signum ( Succ n) = 1 abs n = n frominteger n = fromint n Dann können wir Nats einfach wie Zahlen benutzen. Wenn man jetzt bei seinen Funktionen angeben möchte, dass sie nur Typen aus einer bestimmten Typklasse akzeptieren sollen, schreibt man das: { f a k z e p t i e r t n u r a d i e Ord i m p l e m e n t i e r e n und g i b t n u r b z u r u e c k, d i e Show i m p l e m e n t i e r e n } f :: (Ord a, Show b) => a -> b
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 (+)
MehrProgrammieren 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
MehrProgrammieren 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
MehrTyp-Polymorphismus. November 12, 2014
Typ-Polymorphismus Universität Bielefeld AG Praktische Informatik November 12, 2014 Das Haskell Typ-System Wir beginnen mit einer Wiederholung des Bekannten: In allen Programmiersprachen sind Typ-Konzepte
MehrParadigmen 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)]
MehrProgrammieren 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
MehrProgrammieren 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
MehrWS 2011/2012. Georg Sauthoff 1. November 11, 2011
WS 2011/2012 Georg 1 AG Praktische Informatik November 11, 2011 1 gsauthof@techfak.uni-bielefeld.de Skripte sind nun fertig und gibt es in den Tutorien Sprechstunden Zusammenfassung -Kapitel Signatur zuerst
MehrProgrammieren 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
MehrTypklassen. Natascha Widder
Typklassen Natascha Widder 19.11.2007 Motivation Typklassen fassen Typen mit ähnlichen Operatoren zusammen ermöglichen überladenen Funktionen Definition Typklassen Deklarationsschema class Name Platzhalter
MehrEinfü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
MehrHaskell 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:
MehrPraktische 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
MehrFunktionale Programmierung Mehr funktionale Muster
Mehr funktionale Muster Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 07.12.2017 06:56 Inhaltsverzeichnis Pattern Matching..................................
MehrEinfü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
MehrProgrammieren 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
MehrProgrammierkurs II. Typsynonyme & algebraische Datentypen
Programmierkurs II Typsynonyme & algebraische Datentypen Um Dinge der realen Welt abzubilden, ist es nur in den seltensten Fällen komfortabel alles als Zahlen, Strings oder Listen zu kodieren. Wir benötigen
MehrGrundlegende 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
MehrEinführung in die Informatik 2
Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Manuel Eberl, Lars Hupel, Lars Noschinski Wintersemester 2014/15 Lösungsblatt Endklausur 13. Februar 2015 Einführung in
MehrKapitel 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
MehrGrundlegende Datentypen
Funktionale Programmierung Grundlegende Datentypen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 14.11.2017 15:37 Inhaltsverzeichnis Typen........................................
MehrFunktionale 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........................................
MehrZahlen 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
MehrWS 2011/2012. Georg Sauthoff 1. October 26, 2011
WS 2011/2012 Georg 1 AG Praktische Informatik October 26, 2011 1 gsauthof@techfak.uni-bielefeld.de pea*nuts pea*nuts steht für probieren, erfahren, anwenden - Naturwissenschaften und Technik für Schülerinnen
MehrVorsemesterkurs 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
MehrPraktische 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
MehrMugda - Abhängige Typen und Termination-Checking
Mugda - Abhängige Typen und Termination-Checking Karl Mehltretter 1. Februar 2008 Dependent Types Martin-Löf Typentheorie Beweissysteme wie Coq, Lego (proofs as programs). Programmiersprachen: Agda, Epigram.
MehrWas 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
MehrTag 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
MehrQuick-Start Informatik Programmieren in Python Teil 1
Quick-Start Informatik 2011 Programmieren in Python Teil 1 Alles zum Praxisteil } Skript, Übungen, auf Folien... http://vorkurs.cs.uni-frankfurt.de Bücher: Gratis: http://learnpythonthehardway.org/ Fragen,
MehrProgrammieren in Java
Programmieren in Java Vorlesung 05: Generics Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 19 Inhalt Generics
MehrBasiskonstrukte 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
MehrProgrammieren 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
MehrFunktionale Programmierung ALP I. Algebraische Datentypen und Abstrakte Datentypen. SS 2013 Prof. Dr. Margarita Esponda. Prof. Dr.
Funktionale Programmierung AP I Algebraische Datentypen und Abstrakte Datentypen SS 2013 Abstrakt Datentypen Beispiel: Algebraischen Datentypen für Bäume data SBTree = SBTree SBTree AP I: Margarita Esponda,
MehrProgrammieren in Haskell
Programmieren in Haskell Programmiermethodik Programmieren in Haskell 1 Was wir heute machen Spezifikation Strukturelle Rekursion Strukturelle Induktion Programmieren in Haskell 2 Spezifikation sort [8,
MehrTypklassen und Überladung in Haskell
Typklassen und Überladung in Haskell Überladung: Es gibt mehrere Funktionen mit gleichem Namen. der Typ der Argumente bestimmt, welche gemeint ist. (1; i) + (3; 2i) statt (1, i) complexadd (3; 2i). Haskell-Typklassen:
MehrAlgorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur -
Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur - Punkte: A1: 30, A2: 20, A3: 20, A4: 20, A5: 10, A6: 20 Punkte: /120 12.02.2012 Hinweis: Geben Sie bei allen
Mehr11 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
Mehrzu 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
MehrGrundelemente objektorientierter Sprachen (1)
Grundelemente objektorientierter Sprachen (1) Objekt Repräsentation eines Objektes der realen Welt in der Terminologie objektorientierter Programmiersprachen besitzen Attribute (Eigenschaften), deren Werte
Mehrzu 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
MehrJavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.
JavaScript JavaScript wird direkt in HTML-Dokumente eingebunden. Gib folgende Zeilen mit einem Texteditor (Notepad) ein: (Falls der Editor nicht gefunden wird, öffne im Browser eine Datei mit der Endung
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel
MehrCrashkurs: Haskell. Mentoring FU Berlin Felix Droop
Crashkurs: Haskell Mentoring FU Berlin 7.11.2018 Felix Droop Crashkurs Haskell 1. GHCi Umgebung
MehrEinführung in die Informatik 2 8. Übung
Technische Universität München WS 2013/14 Institut für Informatik 03.11.2012 Prof. Tobias Nipkow, Ph.D. Abgabe: 10.12.2012, 15:30 Lars Noschinski, Lars Hupel, Dr. Jasmin Blanchette Einführung in die Informatik
Mehr1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.
Themen der Übung Kontrollstrukturen, Pseudocode und Modulo-Rechnung CoMa-Übung III TU Berlin 9.10.01 1 Bedingte Anweisungen Vergleiche und logische Operatoren 3 Fallunterscheidungen 4 Zeichen und Zeichenketten
MehrHSR Rapperswil 2001 Markus Rigling. Programmieren: Exceptions Auflage
HSR Rapperswil 2001 Markus Rigling Programmieren: Exceptions 1 1. Auflage Inhaltsverzeichnis: 1. Was sind Exceptions?... 3 2. Struktur des Exception Handling... 3 3. Try-Block... 4 4. Exception Handler
MehrTag 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
MehrHaskell für Mathematiker
Haskell für Mathematiker Joachim Breitner AG Seminar Topology 12. Mai 2016, Karlsruhe LEHRSTUHL PROGRAMMIERPARADIGMEN 1 KIT 19.2.2016 University of the Joachim State ofbreitner Baden-Wuerttemberg - Haskell
MehrWorkshop 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
MehrFunktionale 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
Mehr2.3 Spezifikation von Abstrakten Datentypen
Abstrakte Datentypen (ADT) 2.3 Spezifikation von Abstrakten Datentypen Sichtbare Schnittstelle: Typbezeichner Signaturen der Operationen Spezifikation der Operationen Abstraktionsbarriere Implementierung
MehrEinführung in die Informatik 2 6. Übung
Technische Universität München WS 2012/13 Institut für Informatik 20.11.2012 Prof. Tobias Nipkow, Ph.D. Abgabe: 27.11.2012, 15:30 Lars Noschinski, Dr. Jasmin Blanchette, Dmitriy Traytel Einführung in die
MehrGrundelemente objektorientierter Sprachen (1)
Grundelemente objektorientierter Sprachen (1) Objekt Repräsentation eines Objektes der realen Welt in der Terminologie objektorientierter Programmiersprachen besitzen Attribute (Eigenschaften), deren Werte
MehrEinführung in die Informatik Übung
Technische Universität München WS 2014/15 Institut für Informatik 09.01.2015 Prof. Tobias Nipkow, Ph.D. Abgabe: 16.01.2015 L. Noschinski, L. Hupel, M. Eberl Einführung in die Informatik 2 12. Übung Am
MehrBeispiele: (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))
MehrProgrammieren 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
MehrProgrammieren 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
MehrMusterlösung zur 2. Aufgabe der 4. Übung
Musterlösung zur 2. Aufgabe der 4. Übung Da viele von Euch anscheinend noch Probleme mit dem Entfalten haben, gibt es für diese Aufgabe eine Beispiellösung von uns. Als erstes wollen wir uns noch einmal
MehrProgrammieren in Haskell
Programmieren in Haskell Monaden Programmieren in Haskell 1 Sequenzierung mit Dollar und Euro Die Atommüll-Metapher Maybe- und Listen-Monaden Return Die do-notation Monaden als Berechnungen Listenbeschreibungen
MehrTypklassen, 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
MehrTag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)
Tag 5 Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Methoden Deklaration
MehrEinführung in die Funktionale Programmierung mit Haskell
Einführung in die Funktionale Programmierung mit Haskell Typklassen und Polymorphie LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 23. Mai 2013 Planung Freitag:
MehrProgrammieren in Java
Programmieren in Java Vorlesung 01: I/O und einfache Operationen Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2017 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA
MehrGliederung. Algorithmen und Datenstrukturen I. Listen in Haskell: Listen in Haskell: Listen in Haskell. Datentyp Liste Strings Listenkomprehension
Gliederung Algorithmen und Datenstrukturen I D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Winter 2009/10, 16. Oktober 2009, c
MehrOctober 29, Universität Bielefeld AG Praktische Informatik. Programmieren in Haskell. Stefan Janssen. Typ-Synonyme. Algebraische Datentypen
Universität Bielefeld AG Praktische Informatik October 29, 2014 Typsynonyme Neue Typnamen durch Typsynonyme: 1 type Pair a b = (a,b) 2 type Triple a b c = (a,b,c) 3 type OrdList a = [ a] definiert neue
MehrFunktionale Programmierung. Monoide. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München
Funktionale Programmierung Monoide Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 03.12.2018 07:53 Inhaltsverzeichnis Abstraktion..................................... 1 Eine
MehrVariablen. CoMa-Übung VIII TU Berlin. CoMa-Übung VIII (TU Berlin) Variablen / 15
Variablen CoMa-Übung VIII TU Berlin 4.12.2013 CoMa-Übung VIII (TU Berlin) Variablen 4.12.2013 1 / 15 Themen der Übung 1 Typanpassungen 2 Operatoren 3 Variablen-Gültigkeit CoMa-Übung VIII (TU Berlin) Variablen
MehrFunktionale 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
MehrVererbung und Polymorphie
Vererbung und Polymorphie Marc Satkowski, Sascha Peukert 29. September 2016 C# Kurs Gliederung 1. Methodenüberladung 2. Vererbung Polymorphie Methoden- & Eigenschaftsüberschreibung Weitere Schlüsselwörter
MehrVerarbeitung 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 =
MehrProgrammieren in Haskell Einführung
Programmieren in Haskell Einführung Peter Steffen Universität Bielefeld Technische Fakultät 17.10.2008 1 Programmieren in Haskell Veranstalter Dr. Peter Steffen Raum: M3-124 Tel.: 0521/106-2906 Email:
MehrProInformatik: Funktionale Programmierung. Punkte
ProInformatik: Funktionale Programmierung 27.7-22.8.2008, M. Knobelsdorf Probeklausur Ihre persönliche Klausurnummer: Vorname, Nachname: Aufgabe 1 2 3 4 5 6 7 8 Punkte 12 4 4 4 4 2 4 6 40 Erz. Punkte Zum
MehrDie Schnittstelle Comparable
Die Schnittstelle Comparable Wir wollen Such- und Sortieroperationen für beliebige Objekte definieren. Dazu verwenden wir die vordefinierte Schnittstelle Comparable: public interface Comparable { int compareto(object
MehrProgrammieren in Haskell Programmieren mit Listen
Programmieren in Haskell Programmieren mit Listen Peter Steffen Universität Bielefeld Technische Fakultät 14.11.2008 1 Programmieren in Haskell Ein eigener Listen-Datentyp data List a = Nil Cons a (List
MehrObjektorientiertes Programmieren (Java)
Grundlagen Objektorientiertes Programmieren (Java) Java folgt gewissen Rechtschreibregeln die Syntax. Diese besagt, dass hinter jeden Befehl ein Semikolon( ; ) stehen muss, damit der Computer weiß, dass
MehrBeispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio)
Beispiel Beispiel: Namensliste konvertieren (Karl Egon Meier Meier, Karl Egon). s/(.*) (.*)/$2, $1/; Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio) s/(.*) (.*)/$2, $1/; s/(.*) ([a-z]+
MehrHASKELL 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,
MehrPraktische 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
MehrImplementieren von Klassen
Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und
MehrWS 2011/2012. Georg Sauthoff 1. November 1, 2011
WS 2011/2012 Georg 1 AG Praktische Informatik November 1, 2011 1 gsauthof@techfak.uni-bielefeld.de Übungen Abgaben und Aufgabenblätter am Ende der Vorlesung Skript gibt es demnächst in den Übungen Der
MehrPraktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster
16:02:16 2017-01-17 1 [30] Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom 10.01.2017: Monaden als Berechnungsmuster Christoph Lüth Universität Bremen Wintersemester 2016/17 Frohes
MehrWS 2011/2012. Georg Sauthoff 1. October 18, 2011
in in WS 2011/2012 Georg 1 AG Praktische Informatik October 18, 2011 1 gsauthof@techfak.uni-bielefeld.de Neue Übungsgruppen in neue Übungsgruppen neue Tutoren Sprechstunden in GZI-Arbeitsraum (V2-240)
MehrEinführung in die Informatik 2
Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Lars Hupel, Lars Noschinski, Dr. Jasmin Blanchette Wintersemester 2013/14 Abschlussklausur 21. Februar 2014 Einführung
MehrKapitel 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
MehrKapitel 3: Variablen
Kapitel 3: Variablen Thema: Programmieren Seite: 1 Kapitel 3: Variablen Im letzten Kapitel haben wir gelernt, bestimmte Ereignisse zu wiederholen solange eine Bedingung erfüllt ist. Nun möchten wir aber
Mehr2.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Ü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
MehrVariablen, 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
MehrGrundlagen 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
Mehr12 Abstrakte Klassen, finale Klassen und Interfaces
12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,
MehrAbstrakte Datentypen II
7 Abstrakte Datentypen II Nachdem wir im letzten Kapitel die grundlegenden Eigenschaften abstrakter Datentypen beschrieben haben und dabei eher einfache Beispiele betrachtet haben, soll es in diesem Kapitel
MehrAlgorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 9 -
Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 9 - Dozent: Prof. Dr. G. Rote Tutoren: J. Fleischer, T. Haimberger, N. Lehmann, C. Pockrandt, A. Steen 10.01.2012 Ziele
MehrInstitut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke
Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie
MehrManuel M. T. Chakravarty Gabriele C. Keller Einführung in die Programmierung mit Haskell
Manuel M. T. Chakravarty Gabriele C. Keller Einführung in die Programmierung mit Haskell ein Imprint von Pearson Education München Boston San Francisco Harlow, England Don Mills, Ontario Sydney Mexico
MehrProgrammieren in Haskell Abstrakte Datentypen
Programmieren in Haskell Abstrakte Datentypen Peter Steffen Universität Bielefeld Technische Fakultät 09.01.2009 1 Programmieren in Haskell Einführung Man unterscheidet zwei Arten von Datentypen: konkrete
MehrHaskell, 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
MehrWS 2011/2012. RobertGiegerich. November 12, 2013
WS 2011/2012 Robert AG Praktische Informatik November 12, 2013 Haskell-Syntax: Ergänzungen Es gibt noch etwas bequeme Notation für Fallunterscheidungen, die wir bisher nicht benutzt haben. Bisher kennen
MehrFahrplan. Algebraische Datentypen. Inhalt. Der Allgemeine Fall: Algebraische Datentypen. Algebraische Datentypen: Nomenklatur
Fahrplan Teil I: Funktionale Programmierung im Kleinen Praktische Informatik 3: Funktionale Programmierung Vorlesung 3 vom 01112016: Algebraische Datentypen Christoph Lüth Universität Bremen Wintersemester
Mehr