Klausur, Juli 2005, CIS, Symbolisches Programmieren Name : ____________________________________
1
Note: ______________
Bemerkung: In den Lösungen muß die Definition jedes verwendeten Systemprädikats (außer not) angegeben werden.
1. Unifizieren die beiden Terme und falls ja, was ist die Belegung der Variablen X,Y,Z, nach der Unifikation:
a) g(Y,Z,[X,Y|[Z]]) und g(3,2,[2,3,2])
Unifiziert Ja/Nein, falls ja: X=______ Y= _______ Z= _________
falls nein: warum nicht:___________________________________
b) g([X|Y]) und g([[2,[3,4]],5])
Unifiziert Ja/Nein, falls ja: X=______ Y= _______
falls nein: warum nicht:___________________________________
c) g([X]) und g([2,3,4])
Unifiziert Ja/Nein, falls ja: X=______
falls nein: warum nicht:___________________________________
d) g(X,f([a,b],X),Z) und g(f(Y),Z,f(Y,X)).
Unifiziert Ja/Nein, falls ja: X=______ Y= _______ Z= _________
falls nein: warum nicht:___________________________________
2. Gegeben sind Vater- und Mutter-Kind Relationen.
vater(jean,yves).
vater(jean,julie).
vater(yves,lucien).
vater(yves,zoe).
vater(pierre,virginie).
vater(pavel,natascha).
mutter(claire,yves).
mutter(marie,julie).
mutter(julie,virginie).
mutter(lea,lucien).
mutter(lea,zoe).
Klausur, Juli 2005, CIS, Symbolisches Programmieren Name : ____________________________________
2
a) schreiben Sie ein Prädikat kind(X,Y) das beweist, ob X ein Kind von Y ist.
b) schreiben Sie ein Prädikat vorfahren(X,Y), das alle Vorfahren, Mutter,Oma,Vater und Opa, falls vorhanden, von X ausgibt.
c) erweitern Sie das Prädikat vorfahren aus b) um ein Argument, das vom Kind bis zum ältesten Vorfahren alle beteiligten Personen auflistet.
Klausur, Juli 2005, CIS, Symbolisches Programmieren Name : ____________________________________
3
3. Schreiben Sie ein Prologprädikat, das feststellt, ob
a) ein Element mindestens zweimal in einer Liste vorkommt.
Beispielaufruf: doppeltmin(2,[2,5,2,1,6,2]) liefert yes, doppeltmin(3,[4,1,6,3]) liefert no.
b) ein Element genau zweimal in einer Liste vorkommt.
Beispielaufruf: doppelt(4,[2,1,6,4]) liefert no, doppelt(6,[6,2,5,6] liefert yes.
4. Gegeben ist folgende DCG:
s --> np,vp.
np --> det,n.
vp --> v,np.
vp --> v.
det --> [a].
n --> [woman].
n --> [man].
v --> [meets].
Klausur, Juli 2005, CIS, Symbolisches Programmieren Name : ____________________________________
4 a) Welche Sätze erzeugt die DCG?
b) Wie muss die DCG geändert werden, damit auch folgende Sätze erzeugt werden können?
a nice woman meets a nice man.
a nice man meets a nice woman.
5. Schreiben Sie ein Prädikat intersection(Menge1,Menge2,Schnittmenge), das die Schnittmenge berechnet.
Beispielaufruf: intersection([2,3,1,4],[3,4],X) soll X = [3,4] zurückgeben.