Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Wir geben hier eine Funktion an, die für beliebige Funktionen auf natürlichen Zahlen die Funktionstabelle<br />
<strong>der</strong> Werte 0..n bestimmt.<br />
Beispiel 2.3.6<br />
Map(f,n) = if n = 0 then [0↦→f(0)] else Map(f,n-1) + [n↦→f(n)]<br />
Dann gilt Map : (IN→IN)×IN→ (IN→IN) und es ist zum Beispiel<br />
Map(λn.n 2 , 5) = [0↦→0, 1↦→1, 2↦→4, 3↦→9, 4↦→16, 5↦→25]<br />
2.3.5 Listen<br />
Bei <strong>der</strong> Erklärung <strong>der</strong> Semantik prädikatenlogischer Formeln haben wir neben dem Begriff <strong>der</strong> Tabelle auch<br />
Listen benutzt, also geordnete Aufzählungen von Werten, die (an<strong>der</strong>s als bei Mengen) möglicherweise auch<br />
mehrfach vorkommen. Die Menge aller Listen mit Werten aus <strong>der</strong> Grundmenge A wird mit A ∗ bezeichnet.<br />
Wir begrenzen Listen durch spitze Klammern. bezeichnet die leere Liste, die Liste, die aus<br />
den Werten 1,2,3,4 und dann wie<strong>der</strong> 3 besteht.<br />
Die Funktion head:A ∗ →A bestimmt das erste Element einer Liste, falls die Liste nicht leer ist (ansonsten ist<br />
head undefiniert). So ist zum Beispiel head() = 1<br />
Die Funktion tail:A ∗ →A ∗ bestimmt den Rest <strong>der</strong> Liste nach Entfernung des ersten Elementes. Zum Beispiel<br />
ist tail() = . Für die leere Liste ist tail() = definiert.<br />
Wir benötigen außerdem noch eine Operation, welche Listen zusammensetzt. Diese Funktion wird mit dem<br />
Infixsymbol & bezeichnet. So ist & = <br />
Aus diesen Grundoperatoren lassen sich eine Reihe weiterer nützlicher Funktionen bilden, die wir zuweilen<br />
verwenden werden.<br />
Beispiel 2.3.7<br />
1. Die Funktion length:A ∗ →IN bestimmt die Länge einer Liste. Sie läßt sich rekursiv wie folgt beschreiben:<br />
length(l) = if l= then 0 else length(tail(l))+1<br />
Damit berechnet sich z.B. die Länge <strong>der</strong> Liste wie folgt:<br />
length()<br />
= if = then 0 else length(tail())+1<br />
= length(tail())+1<br />
= length()+1<br />
= (if = then 0 else length(tail())+1) + 1<br />
= (length()+1) + 1<br />
= (if = then 0 else length(tail())+1) + 1 + 1<br />
= (length()+1) + 1 + 1<br />
= (if = then 0 else length(tail())+1) + 1 + 1 + 1<br />
= 0 + 1 + 1 + 1<br />
= 3<br />
2. Die in Abbildung 2.13 auf Seite 47 benutzte Funktion einelementig:A ∗ →IB ergibt sich durch einen Test<br />
auf die Länge 1:<br />
einelementig(l) = length(l)=1<br />
Man beachte, daß bei <strong>der</strong> Definition dieser Funktion keine weitere if-Abfrage nötig war, da sie selbst<br />
einen Wahrheitswert als Ergebnis liefert.<br />
3. Die (Infix-)Funktion cons:A×A ∗ →A ∗ hängt ein Element vor den Anfang einer Liste. Sie ist eigentlich<br />
nur eine Kurzschreibweise für einen Spezialfall <strong>der</strong> &-Operation:<br />
cons(a,l) = & l