22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!