Direkt zum Inhalt | Direkt zur Navigation

Sektionen
Benutzerspezifische Werkzeuge

Seminar 2 - Teil I

Einfache Datentypen - Tim Richter

seminar02_1.lhs — LHS source code, 1Kb

Dateiinhalt

----------------------------------------------------------------------
--
--  Seminar Theoretische Informatik                         \ \
--  "Funktionale Programmierung mit Haskell"                 \ \ ---
--  Universität Potsdam SS 2014                              / /\ --
--  Tim Richter / Mario Frank                               / /  \
--
--  2: Einfache Typen I
----------------------------------------------------------------------

> module Seminar02_1 where
> import Prelude hiding (Bool, False, True, (&&), (||))

----------------------------------------------------------------------
-- Bool
----------------------------------------------------------------------

> data Bool = False | True deriving Show

Funktionsdefinition durch pattern matching

> not :: Bool -> Bool
> not True  = False
> not False = True

Wie jeder Haskell-Typ hat Bool ausser True und False noch den Wert undefined.
Da undefined auf keines der beiden pattern passt, ist

<  not undefined 
<  = {pattern exhaustion}
<  undefined

Eine Funktion f mit  | f undefined = undefined | nennt man "strict",
andernfalls "non-strict". (Übung: Kann man eine non-strict function |not'|
definieren, die sich auf True und False wie |not| verhält?

> infixr 3 &&
> (&&) :: Bool -> Bool -> Bool
> False && x = False
> True  && x = x
>
> infixr 3 ||
> (||) :: Bool -> Bool -> Bool
> False || x = x
> True  || x = True

Benutzen wieder pattern matching auf dem linken Argument.
&& ist strict im linken, non-strict im rechten Argument

 undefined && False
 = {pattern exhaustion}
 undefined

 False && undefined
 = {Def. &&}
 False

insbesondere also auch nicht wirklich kommutativ!

Übung: Kann man && und || auch strict in beiden Argumenten
definieren?

Übung: Vervollständigen Sie die folgende Definition
      der Implikation:

> implies :: Bool -> Bool -> Bool
> True  `implies` x  = undefined
> False `implies` _  = undefined

Was ist mit Assoziativität? 











Artikelaktionen
Auf einen Blick
Lehrform Seminar
Empfohlen ab FS 3
Voraussetzungen Grundkenntnisse der Informatik aus den ersten 4 Semestern, vor allen aus den Bereichen Theoretische Informatik und Logik. Teilnahme an der Veranstaltung "Automatisierte Logik und Programmierung" ist vorteilhaft, aber nicht notwendig.
Benotet Ja
Punkte gesamt 3
davon praktisch 3
Sprache deutsch/englisch
Fremdhörer zugelassen? Nein
Teilgebiete Theoretische Informatik(2000), Praktische Informatik(3000), Wahlfrei(7000)
Studiengang Bachelor, Master
Belegung via PULS