Download (1405Kb)
Download (1405Kb)
Download (1405Kb)
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
72 KAPITEL 4. DIE STANDARDSEMANTIKEN<br />
die allgemeine Verwendung der lo-Reduktionsstrategie für den cbn-Auswertungsmechanismus. Programme<br />
(erster Ordnung) funktionaler Programmiersprachen wie Miranda, Haskell und Hope sind<br />
in gewisser Weise auch nur Programme mit Hilfsfunktionen und keine mit Pattern, wie wir in<br />
Kapitel 7 sehen werden.<br />
Allerdings geben die mit dem cbn-Auswertungsmechanismus arbeitenden funktionalen Programmiersprachen<br />
für interaktive Ein- und Ausgabe auch Approximationen potentiell unendlicher Datenstrukturen<br />
aus. Jedoch handelt es sich bei diesen ausgegebenen Datenstrukturen immer um<br />
Listen und um keinen anderen algebraischen Datentyp (alle Ausgaben werden in Zeichenketten<br />
(Strings), also Listen konvertiert). Diese ” passen“ aufgrund ihres speziellen Aufbaus genau zur<br />
lo-Reduktionsstrategie.<br />
Beispiel 4.11 lo-Reduktion und unendliche Listen<br />
liste1’ → a:liste1’<br />
a → []<br />
[[liste1 ′ ]] fix<br />
P,cbn = [[], [], [], . . .].<br />
Dieser unendliche Konstruktorterm wird auch durch die lo-Reduktionsstrategie approximiert:<br />
liste1 ′ −−→ a : liste1<br />
P,lo ′ −−→ [] : liste1<br />
P,lo ′ −−→ [] : a : liste1<br />
P,lo ′ −−→ . . ..<br />
P,lo<br />
Die zur lo-Reduktionsstrategie symmetrische rightmost-outermost Reduktionsstrategie produziert<br />
dagegen<br />
liste1 ′ <br />
P,ro<br />
[·]<br />
<br />
alg<br />
a : liste1 ′ <br />
⊥cbn <br />
P,ro<br />
[·]<br />
<br />
alg<br />
a : a : liste1 ′ <br />
⊥cbn <br />
P,ro<br />
[·]<br />
<br />
alg<br />
. . .<br />
⊥cbn ⊥ ⊥ : ⊥ ⊥ : ⊥ : ⊥ . . .<br />
Wären die Argumente des Listenkonstruktorsymbols Cons bzw. : in der umgekehrten Reihenfolge,<br />
dann wäre somit die rightmost-outermost Reduktionsstrategie ” passend“. Freilich hat die leftmostoutermost<br />
Reduktionsstrategie auch bei Listen ihre Grenzen:<br />
Das Miranda-Programm<br />
liste3 = 1:2:undef:3:[]<br />
(undef = undef) produziert zu der Eingabe liste3 nur die Ausgabe:<br />
[1,2,<br />
Bei Betrachtung realer funktionaler Programmiersprachen gehören in diesen Zusammenhang jedoch<br />
auch noch Begriffe wie head-normal form und weak head-normal form, auf die wir jedoch nicht<br />
eingehen wollen (siehe [Fie&Har88]).<br />
✷