10.10.2013 Aufrufe

Aufgaben Logische Programmierung

Aufgaben Logische Programmierung

Aufgaben Logische Programmierung

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.

?- [a21_ausdruck, a22_wertetabelle].<br />

Aufgabe 23 Plus-Minus-Terme<br />

Dateiname: a23_plusminus.pl<br />

In dieser Aufgabe betrachten wir Ausdrücke, die aus Zahlen mit Hilfe von + und − und Klammern<br />

gebildet sind, z.B. den Ausdruck 8 − (2 + 3). Die übliche Darstellung eines solchen Ausdrucks,<br />

z.B. 8-(2+3) stellt zugleich einen Term in Prolog dar. Wir wollen einen solchen Term einen Plus-<br />

Minus-Term nennen. Wir wollen aber noch eine alternative Darstellung eines solchen Ausdrucks<br />

als Prologterm betrachten. Dazu definieren wir induktiv den Begriff „add-sub-Term“. add-sub-<br />

Terme sind spezielle Prologterme. Hier die induktive Definition:<br />

1. Für jede Zahl z ist der Prologterm zahl(z) ein add-sub-Term.<br />

2. Wenn t1 und t2 zwei add-sub-Terme sind, dann sind auch add(t1,t2) und sub(t1,t2) addsub-Terme.<br />

Jeder Plus-Minus-Term hat auch eine Darstellung als add-sub-Term und umgekehrt. Z.B. entspricht<br />

dem Plus-Minus-Term 8-(2+3) der add-sub-Term sub(zahl(8),add(zahl(2),zahl(3))).<br />

Stellen wir uns nun vor, wir haben bereits ein Programm, das mit dieser Darstellung arbeitet,<br />

aber auch ein von jemand anderem geschriebenes Programm mit ähnlicher Darstellung, nur dass<br />

die Funktoren anders benannt sind: sum statt add, dif statt sub und num statt zahl. Analog wie<br />

oben definieren wir: sum-dif-Terme sind spezielle Prologterme. Hier die induktive Definition:<br />

1. Für jede Zahl z ist der Prologterm num(z) ein sum-dif-Term.<br />

2. Wenn t1 und t2 zwei sum-dif-Terme sind, dann sind auch sum(t1,t2) und dif(t1,t2) sumdif-Terme.<br />

Jeder Plus-Minus-Term hat auch eine Darstellung als sum-dif-Term und umgekehrt. Z.B. entspricht<br />

dem Plus-Minus-Term 8-(2+3) der sum-dif-Term dif(num(8),sum(num(2),num(3))).<br />

Wir wollen beide Programme in einem größeren Softwaresystem verwenden und benötigen daher<br />

Prädikate zur Übersetzung von einer Darstellung in die andere. Definieren Sie dazu<br />

1. ein Prologprädikat addsub_sumdif/2 zur Übersetzung eines add-sub-Terms in einen sumdif-Term<br />

und umgekehrt! Z.B. sollte gelten<br />

addsub_sumdif(sub(zahl(8),add(zahl(2),zahl(3))),<br />

dif(num(8),sum(num(2),num(3))))<br />

2. ein Prologprädikat addsub_plusminus/2 zur Übersetzung eines add-sub-Terms in einen<br />

Plus-Minus-Term! Beispiel:<br />

?- addsub_plusminus(sub(zahl(8),add(zahl(2),zahl(3))), Plusminusterm).<br />

Plusminusterm = 8-(2+3)<br />

3. ein Prologprädikat plusminus_addsub/2 zur Übersetzung eines Plus-Minus-Terms in einen<br />

add-sub-Term! Beispiel:<br />

?- plusminus_addsub(8-(2+3), Addsubterm).<br />

Addsubterm = sub(zahl(8),add(zahl(2),zahl(3)))<br />

Hinweis: Schauen Sie sich die Dokumentation des Prolog-Prädikats number/1 an! Probieren<br />

Sie es auch aus mit Anfragen wie<br />

?- number(5).<br />

?- number(2+3).<br />

14

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!