Logik:Klausuren/08.02.2003/2.1 Aufgabe

Aus Tudwiki
Wechseln zu: Navigation, Suche

1. Aufgabenstellung[Bearbeiten]

Die Operatoren $ \mathsf{neg, and, or}\; $ seien durch $ \mathsf{?-op(140,fy,neg)}\; $ bzw. $ \mathsf{?-op(160,xfy,[and,or])}\; $ definiert. Schreiben Sie ein Prolog-Programm $ \mathsf{rang/2}\; $, das den Rang einer aussagenlogischen Formel ermittelt. Beschränken Sie sich dabei auf Formeln, die nur die Junktoren $ \neg ,\and ,\or\; $ enthalten. Z.B. soll der Aufruf von $ \mathsf{?-rang(neg(p\ and\ neg(p\ and\ p)),R).} $ das Ergebis $ \mathsf{R=3} $ liefern.

2. Lösung[Bearbeiten]

$ \mathsf{:- op(100,xfx,[and,or]).}\; $
$ \mathsf{:- op(20,fy,neg).}\; $

$ \mathsf{rang(X,0) :- atomic(X).}\; $
$ \mathsf{rang(neg\ neg\ X,E) :- rang(X, E1), E\ is\ E1+1,\ !.}\; $
$ \mathsf{rang((X\ and\ Y),E) :- rang(X,E1),rang(Y,E2),E\ is\ E1+E2+1.}\; $
$ \mathsf{rang((X\ or\ Y),E) :- rang(X,E1),rang(Y,E2),E\ is\ E1+E2+1.}\; $
$ \mathsf{rang(neg\ (X\ and\ Y),E) :- !,rang(neg\ X,E1),rang(neg\ Y,E2),E\ is\ E1+E2+1.}\; $
$ \mathsf{rang(neg\ (X\ or\ Y),E) :-! ,rang(neg\ X,E1),rang(neg\ Y,E2),E\ is\ E1+E2+1.}\; $
$ \mathsf{rang(neg\ X,E):-rang(X,E).}\; $

3. Lösungsweg[Bearbeiten]

4. Alternativen/Diskussion/Hinweise etc.[Bearbeiten]

Prolog-Programm zum Ausprobieren:

:-op(100,xfx,[and,or]).
:-op(20,fy,neg).

rang(X,0):-atomic(X).
rang(neg neg X,E):-rang(X,E1),E is E1+1,!.
rang((X and Y),E):-rang(X,E1),rang(Y,E2),E is E1+E2+1.
rang((X or Y),E):-rang(X,E1),rang(Y,E2),E is E1+E2+1.
rang(neg (X and Y),E):-!,rang(neg X,E1),rang(neg Y,E2),E is E1+E2+1.
rang(neg (X or Y),E):-!,rang(neg X,E1),rang(neg Y,E2),E is E1+E2+1.
rang(neg X,E):-rang(X,E).


zur Klausur 08.02.2003
Aufgaben-Kategorie Prolog