Direkt zum Inhalt | Direkt zur Navigation

Sektionen
Benutzerspezifische Werkzeuge

Übungsblatt 1

Lösungen bitte bis 24.04.2014 per mail an Mario Frank <eladrion@cs.uni-potsdam.de> und Tim Richter <tim@cs.uni-potsdam.de>

Uebung01.lhs — LHS source code, 3Kb

Dateiinhalt

% ----------------------------------------------------------------------
% --
% --  Seminar Theoretische Informatik 
% --  "Funktionale Programmierung mit Haskell"
% --  Universität Potsdam SS 2014
% --  Tim Richter / Mario Frank
% --
% ----------------------------------------------------------------------
% 
\documentclass{article}
%include lhs2TeX.fmt
%include polycode.fmt
\usepackage[ngerman]{babel}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
\usepackage{fullpage}
\setlength{\parindent}{0pt}
\begin{document}

\section{Natürliche Zahlen}
Wir definieren die natürlichen Zahlen, also die positiven ganzen Zahlen inklusive
der Null:

Erst einmal führen wir einen Modulnamen ein und importieren die
Prelude-Umgebung.

\begin{code}
module Uebung where
import Prelude
\end{code}

Jetzt können wir den Datentypen Nat deklarieren.

\begin{code}
data Nat = O | S Nat
	deriving Show
\end{code}

Zur Vereinfachung führen wir eine Transformationsfunktion von Int nach Nat ein.

\begin{code}
intToNat	:: Int -> Nat
intToNat 0	= O
intToNat n	= S ( intToNat (n-1) )
\end{code}

Auch eine Transformation von Nat nach Int sollte nicht fehlen.

\begin{code}
natToInt	:: Nat -> Int
natToInt O	    = 0
natToInt (S n)	= 1 + ( natToInt n )
\end{code}

%\begin{code}
%showNat			::  Nat -> String
%showNat O		=   "O"
%showNat(S O)	=   "S O"
%showNat(S(S n))	=   "S ("++ showNat(S n)++")"
%\end{code}

\subsection{Addition}

Vervollständigen Sie die folgende Definition der Addition add für Nat.

\begin{code}
add			::  Nat -> Nat -> Nat
add m  O		  =   undefined
add m (S n)		=   undefined
\end{code}

\begin{code}
test1 = "add (intToNat 3) (intToNat 4) = " ++ show (add (intToNat 3) (intToNat 4))
\end{code}

\subsection{Multiplikation}
Implementieren Sie die Multiplikation multiply für Nat.
\begin{code}
multiply			::  Nat -> Nat -> Nat
\end{code}

\begin{code}
test2 = "multiply (intToNat 8) (intToNat 256) = " ++ 
        show (natToInt ( multiply (intToNat 8) (intToNat 256)))
\end{code}

\subsection{Gleichheit von Nat}
Definieren Sie die Gleichheit equals von Elementen aus Nat.
Geben Sie auch die Typdeklaration an!


\begin{code}
test3 = "equals (intToNat 8) (intToNat 256) = " ++ 
        show ( equals (intToNat 8) (intToNat 256))
test4 = "equals (intToNat 32) (intToNat 32) = " ++ 
        show ( equals (intToNat 32) (intToNat 32))
\end{code}

\subsection{Ordnungsrelation}
Definieren Sie die Ordnungsrelation lessThen für Nat.


\begin{code}
test5 = "lessThen (intToNat 8) (intToNat 256) = " ++ 
        show ( lessThen (intToNat 8) (intToNat 256))
test6 = "lessThen (intToNat 32) (intToNat 32) = " ++ 
        show ( lessThen (intToNat 32) (intToNat 32))
\end{code}

\section{Listen von Nat}
Die natürlichen Zahlen sind eine schöne Sache. Aber was können wir damit machen?
Wir können damit beispielsweise Listen erzeugen.

\subsection{Länge von Listen}
Definieren sie die Länge lengthOf einer Liste von Nat wobei das Ergebnis vom
Typ Nat sein soll.

\begin{code}
test8 = "lengthOf ([O,O,O,S(S(S(O))),O,S(S(O))] = " ++ 
        show ( lengthOf ([O,O,O,S(S(S(O))),O,S(S(O))]))
\end{code}

\subsection{Elementzugriff bei Listen}
Definieren Sie eine Funktion get, die das n-te Element aus einer Liste 
von Nat zurückgibt. Der Index soll dabei vom Typ Int sein und das erste
Listenelement soll den Index 0 haben.


\begin{code}
test9 = "get ([O,O,O,S(S(S(O))),O,S(S(O))]) 3 = " ++ 
        show ( get ([O,O,O,S(S(S(O))),O,S(S(O))]) 3)
\end{code}


\section{Tests}
\begin{code}
test = sequence_ (map putStrLn [ 
	test1,
	test2,
	test3,
	test4,
	test5,
	test6,
	test8,
	test9])
\end{code}
\end{document}
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