FB18 - Das Forum für Informatik

fb18.de / Bachelorstudieng / PM Praktische Informatik

SE3-Logik Probeklausur-Musterlösung

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) 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 5
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

Re: SE3-Logik Probeklausur-Musterlösung 2007-02-19 15:48
f0k
Aufgabe 6
{Anmerkung: Ich hab keine Ahnung, ob map das macht, was ich schätze und was Curry in einem Filter soll, das ist hier also mehr oder weniger bewusst geraten.}
a)
i. (3 (1 2))
ii. (2 3 4)
iii. (2 1 4 3)

b)
{Auch hier bin ich mir nicht sicher. Ich bin mal davon ausgegangen, dass x bei der Definition von foo eine neue Variable wird und das außen definierte x überdeckt, y aber weiterhin von außen kommt. Damit ergäbe sich: foo(z) = 7*z.}
#undefined
#undefined
#undefined
28
21

c)
{Müsste ich ins Skript gucken.}

d)
Die Funktion liefert das n Elemente lange Präfix der übergebenen Liste, wenn a mehr als n Elemente besitzt, und sonst die gesamte Liste a.

e)
praefix([], _, []). praefix(_, 0, []). praefix([A|L], N, [A|L2]) :- N2 is N-1, praefix(L, N2, L2).
f)
Abgesehen davon, dass bei (d) eine Liste zurückgeliefert wird und sie bei (e) in eine dritte Argumentstelle hineininstanziiert wird, haben beide Programme das in d) beschriebene Verhalten.

Re: SE3-Logik Probeklausur-Musterlösung 2007-02-19 16:30
ethrandil
Hallo,

ich habe gerade folgende Mail an Menzel geschrieben:

Hallo,

ich glaube in der Lösung (erhalten durch markieren des
durchsichtigen Lösungstextes) zur Probeklausur ist ein Fehler bei
Aufgabe 6a) iii.

Dort steht (filter (curry > 0) (quote (2 -3 1 4 -1 3 -2 0))) ergäbe
(quote (2 1 4 3)).
Das stimmt so meiner Meinung nach nicht.
(curry > 0) wertet aus zu einer Funktion (lambda (x) (0 > x)) und
(filter) lässt alle Elemente in der liste, die dieses erfüllen.

Das gibt für mich aber (quote (-3 -1 -2))!

Wenn man curry so definiert wie in diesem Dokument
(http://www.cs.utah.edu/plt/slideshow/cs2010-f03-slides/lecture16.pdf),
dann ergibt sich bei mir unter drscheme (Sprache Swindle) auch genau
dieses Ergebnis.
(Allerdings heißt es dann auch (filter ((curry >) 0) (quote (2 -3 1
4 -1 3 -2 0)))

mfg
- eth

Re: SE3-Logik Probeklausur-Musterlösung 2007-02-19 16:38
f0k
[…] in der Lösung (erhalten durch markieren des
durchsichtigen Lösungstextes) […]
Argh! Von der Datei selbst habe ich nur das Deckblatt gesehen und auf dem Ausdruck war von der weißen Schrift auf fast-weißem "Probeklausur"-Schriftzug nichts mehr übrig. [img]http://www.fb18.de/gfx/12.gif[/img]
Danke für den Tipp!

Re: SE3-Logik Probeklausur-Musterlösung 2007-02-19 17:20
ethrandil
Moin,

Herr Menzel hat geantwortet, dass diese Lösungen NICHT mehr KORREKTURGELESEN wurden und nicht als Musterlösungen gedacht sind.
Es sei nur einfacher gewesen sie durchsichtig zu machen als sie ganz raus zu nehmen.
Ansonsten gibt er mir Recht.

mfg
- clemens

Re: SE3-Logik Probeklausur-Musterlösung 2007-02-19 18:01
Ragmaanir
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.

Hm, ich würde sagen dass p3 nicht transitiv ist.

Re: SE3-Logik Probeklausur-Musterlösung 2007-02-19 19:16
f0k
Hm, ich würde sagen dass p3 nicht transitiv ist.
Dann beweise es (ein Gegenbeispiel reicht ja).

Die zweite Liste muss immer eine gerade Anzahl Elemente haben, dadurch findest Du keine drei Listen A, B, C mit p3(A,B) und p3(B,C) und nicht p3(A,C). Hab ich zumindest nicht.


Was anderes: Die Lösung zu Nr. 6 a) i. ist ((3) 1 2), denn cons tut nicht das, was ich dachte und selbst wenn es das täte, käme nicht das raus, was ich schrieb [img]http://www.fb18.de/gfx/28.gif[/img]. cons erzeugt an sich nur ein gepunktetes Paar aus dem ersten und dem zweiten Argument, also (cons a b) ist das gleiche wie [a|b] in Prolog. Wenn das zweite Argument nun eine Liste ist, entspricht das also dem Einfügen des ersten Argumentes als neues erstes Element in die Liste - (cons (3) (1 2)) fügt also (3) als neues erste Element in die Liste (1 2) ein, es entspricht ja in Prolog [ [3 ]|[1, 2]], also [ [3 ], 1, 2].

Re: SE3-Logik Probeklausur-Musterlösung 2007-02-19 19:17
Ragmaanir
Die zweite Liste muss immer eine gerade Anzahl Elemente haben,

Ah, sorry, habe ich übersehen.

Re: SE3-Logik Probeklausur-Musterlösung 2007-02-25 14:29
Viprex
Die Ergebnisse für SE3 Logik sind zu sehen. Ich missbrauche diesen Fred mal dafür und poste die Statistik dazu:

Noten 1,0 1,3 1,7 2,0 2,3 2,7 3,0 3,3 3,7 4,0 5,0
2 — 2 — 1 — 1 1 — — 3
Durchschnitt: 2,9
Vorliegende Ergebnisse: 10

Nicht wirklich überragend. Habe nicht bestanden, wie "gewünscht" ;-)

Re: SE3-Logik Probeklausur-Musterlösung 2007-02-25 18:43
Anonymer User
Stine vermurkst ja wirklich, was nur irgendwie zu vermurksen ist! Warum die Gute nun auch noch bei einer simplen Notenstatistik höhere Intelligenz walten lässt und nur einen Teil der Studierenden (10 von 17) berücksichtigt, werde ich wohl nie ganz verstehen können.

Hier ist meine vollständige Tabelle (incl. der Nicht-BSc-Studierenden):

1.0 2
1.3 3
1.7 3
2.0 -
2.3 1
2.7 1
3.0 1
3.3 3
3.7 1
4.0 -
5.0 5

Wolfgang Menzel

Re: SE3-Logik Probeklausur-Musterlösung 2007-02-25 19:16
Newton
Apropos Stine-WTF (beim Noten-anschauen gesehen):
Ist es normal dass man für Veranstaltungen angemeldet ist, für die man sich nie angemeldet hat? o_O
http://www.abide.de/stuff/stine-wtf.png

Re: SE3-Logik Probeklausur-Musterlösung 2007-02-25 23:49
GroßerSchöpfer
Apropos Stine-WTF (beim Noten-anschauen gesehen):
Ist es normal dass man für Veranstaltungen angemeldet ist, für die man sich nie angemeldet hat? o_O
http://www.abide.de/stuff/stine-wtf.png

Das ist ja eigentlich ziemlich lang, sagst du uns nachher mal, ob es da wenigstens eine Mittagspause gibt?

Re: SE3-Logik Probeklausur-Musterlösung 2007-02-26 16:44
Anonymer User
Apropos Stine-WTF (beim Noten-anschauen gesehen):
Ist es normal dass man für Veranstaltungen angemeldet ist, für die man sich nie angemeldet hat? o_O
http://www.abide.de/stuff/stine-wtf.png

Ich bin auch bei der Veranstaltung, allerdings taucht sie bei mir nur in meinem Terminplan auf, nicht bei "meinen Veranstaltungen". Ich hatte auch noch eine "Einfuehrung in MuPad"

DeGT, an der Uni

Re: SE3-Logik Probeklausur-Musterlösung 2007-02-26 18:37
Newton
Ob es was bringt, diesen Bug zu berichten..?

Re: SE3-Logik Probeklausur-Musterlösung 2007-02-26 20:54
DeGT
habe ich gemacht, aber nur die Antwort "Melden sie sich doch einfach wieder ab" (nicht wortwörtlich) bekommen. Immerhin schon nach einer Woche.