08.10.2013 Aufrufe

Download (1405Kb)

Download (1405Kb)

Download (1405Kb)

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

174 KAPITEL 8. NICHT-FREIE DATENTYPEN<br />

Beispiel 8.7 Laws und geordnete Listen (S. 187 in [Tho90])<br />

orderedList ::= ONil | OCons(num,orderedList)<br />

OCons(x,OCons(y,z)) => OCons(y,OCons(x,z)), if y < x<br />

Da wir unsere Programme mit Pattern ohne Sorten definiert haben, können wir das entsprechende<br />

Programm, welches Konstruktorfunktionen verwendet, nur skizzieren.<br />

Beispiel 8.8 Konstruktorfunktionen und geordnete Listen<br />

oNil → ONil<br />

oCons(x,ONil) → OCons(x,ONil)<br />

oCons(x,OCons(y,z)) → if y < x<br />

then OCons(y,oCons(x,z))<br />

else OCons(x,OCons(y,z))<br />

fi<br />

Für die Spezifikation der rationalen Zahlen wird eine Funktion zur Berechnung des größten gemeinsamen<br />

Teilers benötigt. Da Datenregeln und Konstruktorgleichungen jedoch Paare von Konstruktortermen<br />

sind, ist die Spezifikation rationaler Zahlen durch sie unmöglich.<br />

Beispiel 8.9 Laws und rationale Zahlen (S.188 in [Tho90])<br />

rational ::= Rat(num,num)<br />

Rat(x,y) => error("zero denominator"), if y = 0<br />

=> Rat(-x,-y), if y < 0<br />

=> Rat(x’,y’), if g > 1<br />

where<br />

x’ = x div g<br />

y’ = y div g<br />

g = gcd x y<br />

Während bei freien Datentypen die Wahl geeigneter Konstruktorsymbole meistens einfach ist,<br />

bieten sich bei nicht-freien Datentypen oft unterschiedliche Möglichkeiten an. So können die<br />

ganzen Zahlen nicht nur durch C = {Zero (0) ,Succ (1) ,Pred (1) }, sondern auch durch C =<br />

{Zero (0) ,Succ (1) ,Minus (1) } aufgebaut werden.<br />

Beispiel 8.10 Datenregeln für ganze Zahlen, II<br />

Succ(Minus(Succ(x))) → Minus(x)<br />

Minus(Zero) → Zero<br />

Minus(Minus(x)) → x<br />

✷<br />

✷<br />

✷<br />

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!