SE3-Logik Probeklausur-Musterlösung
2007-02-19 15:48
f0k
Hallo!
Wenn ich das richtig sehe, gibt es ja keine Musterlösung für die SE3-Probeklausur.
Ich würde gerne versuchen, eine Musterlösung zusammenzustellen… ich werde mal meine Lösungen hier reinstellen. Bitte gebt Feedback, ob ihr das genau so habt und wenn nicht, was und warum nicht. Danke!
Aufgabe 1
a)
1. F=hans, E=klein
2. L=3-2, K=5
3. unifiziert nicht
4. unifiziert nicht
5. A=[m], B=[m], C=[m,[m]]
b)
Man benötigt die Unifikation, um Ziele auszuwerten. Um ein Ziel auszuwerten, müssen die Teilstrukturen des Ziels mit einem der Klauselköpfe des Prädikats unifizieren. Enthält die entsprechende Klausel einen Körper, wird diese zum neuen Ziel. Die bei der Unifikation erzeugten Variablenbindungen bleiben dabei erhalten.
Aufgabe 2
a)
Man benötigt die funktionale Auswertungsumgebung, um mit Werten rechnen zu können. Statt "X is 2+3" kann man sich natürlich auch ein Prädikat "add(2,3,X)" vorstellen, dieses müsste jedoch ebenfalls mit den Werten rechnen und würde eine funktionale Auswertung benötigen.
Zu beachten ist, dass die funktionale Auswertung nicht richtungsabhängig ist.
b)
1. X=11
2. X=4+2
3. Fehler: uninstanziiertes Argument
4. X=3, Y=4
5. No
Aufgabe 3
a)
Aufgabe 4
a)
Das Prädikat heißt daydiff/3 und wird gleich weiterverwendet.
c) Einen Teil c) gibt es in der Probeklausur nicht.
d)
a)
p1 gibt an, ob die beiden übergebenen Listen gleich lang sind, eine gerade Anahl von Elementen haben und jedes Element mit ungeradem Index in beiden Listen gleich ist bzw. unifiziert.
p2 ist wie p1, erlaubt jedoch auch Listen ungerader Länge.
p3 ist wie p1, allerdings darf die erste Liste ein Element länger sein als die zweite (dieses zusätzliche Element muss am Ende der Liste sein).
b)
Ich sehe den Anwendungszweck dieser Prädikate nicht, deshalb kann ich die Bezeichner nicht sinnvoller benennen als sie sind - ich könnte nur A in Element und X,Y in Restliste1,Restliste2 umbenennen.
c)
p1([a,1,b,2,c,1], [a,0,b,3,c,1]).
Yes
p1([a,1,b,2,c], [a,0,b,3,c]).
No
p1([], []).
Yes
p1([a,b,c,d],[a,b,a,d]).
No
d)
p2 ist symmetrisch, reflexiv, transitiv und weder 1:m noch m:1.
p3 ist asymmetrisch, reflexiv, transitiv und weder 1:m noch m:1.
/Zeichengrenze überschritten, Fortsetzung folgt
Wenn ich das richtig sehe, gibt es ja keine Musterlösung für die SE3-Probeklausur.
Ich würde gerne versuchen, eine Musterlösung zusammenzustellen… ich werde mal meine Lösungen hier reinstellen. Bitte gebt Feedback, ob ihr das genau so habt und wenn nicht, was und warum nicht. Danke!
Aufgabe 1
a)
1. F=hans, E=klein
2. L=3-2, K=5
3. unifiziert nicht
4. unifiziert nicht
5. A=[m], B=[m], C=[m,[m]]
b)
Man benötigt die Unifikation, um Ziele auszuwerten. Um ein Ziel auszuwerten, müssen die Teilstrukturen des Ziels mit einem der Klauselköpfe des Prädikats unifizieren. Enthält die entsprechende Klausel einen Körper, wird diese zum neuen Ziel. Die bei der Unifikation erzeugten Variablenbindungen bleiben dabei erhalten.
Aufgabe 2
a)
Man benötigt die funktionale Auswertungsumgebung, um mit Werten rechnen zu können. Statt "X is 2+3" kann man sich natürlich auch ein Prädikat "add(2,3,X)" vorstellen, dieses müsste jedoch ebenfalls mit den Werten rechnen und würde eine funktionale Auswertung benötigen.
Zu beachten ist, dass die funktionale Auswertung nicht richtungsabhängig ist.
b)
1. X=11
2. X=4+2
3. Fehler: uninstanziiertes Argument
4. X=3, Y=4
5. No
Aufgabe 3
a)
leser('Sorglos', 'Susi', LNr, _, _).
b) vorbestellung('BUG17456', leser(Name, Vorname, LNr, _, _).
c) findall(Sig,
(ausleihe(Sig, 56245, _),
\+(vorbestellung(Sig, _))),
Buecher).
d) findall((Vorname, Name, Addr, Sig),
(ausleihe(Sig, LNr, datum(D,M,Y)),
Y*10000 + M*100 + D < 20070107,
leser(Name, Vorname, LNr, Addr, _)),
LangeAusleihen).
e) setof(LNr,
(LNr,
(leser(_, _, _, LNr, _, Y),
Y+60 =< 2007,
ausleihe(_, LNr, _)),
AlteLeser),
length(AlteLeser, Anzahl).
Aufgabe 4
a)
frueher(datum(D1,M1,Y1), datum(D2,M2,Y2)) :-
Y1*10000 + M1*100 + D1 < Y2*10000 + M2*100 + D2.
b) Relativ eklig… habe eine Lösung mit möglichst wenig Nachdenken geschrieben, die für beide Datumsangaben die Tage seit 0.0.0000 berechnet und voneinander abzieht. Die Tage seit 0.0.0000 ergeben sich aus 365*Jahr + Tag und den Tagen der Monate, aufsummiert. Da nicht alle Monate gleich lang sind, sind die Längen der Monate als eigenes Prädikat implementiert:days(M, 31) :-
(M=1; M=3; M=5; M=7; M=8; M=10; M=12),!.
days(2, 28) :- !.
days(_, 30).
Den gesamten Code könnte ich hier hinschreiben, ist aber weder schön noch lehrreich.Das Prädikat heißt daydiff/3 und wird gleich weiterverwendet.
c) Einen Teil c) gibt es in der Probeklausur nicht.
d)
suender(Heute, Frist, LNr) :-
ausleihe(_, LNr, Ausleihe),
daydiff(Heute, Ausleihe, Dif),
Dif > Frist.
e) suenderliste(LNr, Heute, Frist, Anzahl, Liste) :-
findall(Sig,
(ausleihe(Sig, LNr, Ausleihe),
daydiff(Heute, Ausleihe, Dif),
Dif > Frist),
Liste),
length(Liste, Anzahl).
Aufgabe 5a)
p1 gibt an, ob die beiden übergebenen Listen gleich lang sind, eine gerade Anahl von Elementen haben und jedes Element mit ungeradem Index in beiden Listen gleich ist bzw. unifiziert.
p2 ist wie p1, erlaubt jedoch auch Listen ungerader Länge.
p3 ist wie p1, allerdings darf die erste Liste ein Element länger sein als die zweite (dieses zusätzliche Element muss am Ende der Liste sein).
b)
Ich sehe den Anwendungszweck dieser Prädikate nicht, deshalb kann ich die Bezeichner nicht sinnvoller benennen als sie sind - ich könnte nur A in Element und X,Y in Restliste1,Restliste2 umbenennen.
c)
p1([a,1,b,2,c,1], [a,0,b,3,c,1]).
Yes
p1([a,1,b,2,c], [a,0,b,3,c]).
No
p1([], []).
Yes
p1([a,b,c,d],[a,b,a,d]).
No
d)
p2 ist symmetrisch, reflexiv, transitiv und weder 1:m noch m:1.
p3 ist asymmetrisch, reflexiv, transitiv und weder 1:m noch m:1.
/Zeichengrenze überschritten, Fortsetzung folgt