Algorithmische Logik SoSe 12 ¨Ubungszettel 7

Werbung
Algorithmische Logik SoSe 12
Übungszettel 7
Prof. Dr. Ralf Möller, Karsten Martiny, Daniela Becker, Anna Lin
Nächste Übungsgruppe:
25.05.2012, 11:20-12:05, SBS95-E4042 und H 0.04
1. Was ist der Unterschied zwischen Datalog und Prolog?
Lösung:
• Funktionssymbole erlaubt (Prolog) oder nicht (Datalog)
• Dementsprechend Folgen für Entscheidbarkeit, Komplexität, etc.
2. Schreiben sie eine Prolog Funktion, welche die Elemente einer Liste
umkehrt.
Lösung:
r e v e r s e ( [X|Y] , Z ,W) :− r e v e r s e (Y , [ X| Z ] ,W) .
r e v e r s e ( [ ] , X,X ) .
Eine Ausführung von reverse könnte so aussehen:
?− r e v e r s e ( [ 1 , 2 , 3 ] , [ ] , A) .
r e v e r s e ( [ 2 , 3 ] , [ 1 ] , A)
r e v e r s e ( [ 3 ] , [ 2 , 1 ] , A)
r e v e r s e ( [ ] , [ 3 , 2 , 1 ] , A)
A = [3 ,2 ,1]
1
3. Gegeben sei folgendes Prolog Programm:
haspath (X,Y)
haspath (X,Y)
haspath (X,Y)
path ( a , b ) .
path ( b , c ) .
:− path (X,Y ) .
:− path (Y,X ) .
:− path (X, Z ) , haspath (Z ,Y ) .
?− haspath (U,V ) .
Was ist die Ausgabe des Programmes?
Was passiert wenn man dem Programm path(c,a) hinzufügt?
Lösung:
Die Ausgabe des Programmes lautet:
−− A b a r b e i t e n
haspath ( a , b )
haspath ( b , c )
−− A b a r b e i t e n
haspath ( b , a )
haspath ( c , b )
−− A b a r b e i t e n
haspath ( a , c )
haspath ( a , a )
haspath ( a , b )
haspath ( b , b )
d er e r s t e n Regel −−
d er z w e i t e n Regel −−
d er d r i t t e n Regel −−
( von a ueber b nach a )
( von a ueber c nach b )
( von b ueber c nach b )
Von c nach a fehlt, da die Transitivitätsregel nicht symmetrisch ist, sie
generiert also nur von a nach c und nicht von c nach a.
Durch das Hinzufügen der Regel path(c,a) entsteht ein Kreis (a→b→c→a),
und das Prolog Programm terminiert nicht.
2
4. Gegeben seien zwei Teilgraphen Gschwarz und Gweiss über die Knotenmenge V . Schreiben Sie ein Datalogprogramm, welches alle Paare (a, b)
berechnet, so dass es einen Pfad von a nach b gibt, wobei sich schwarze
und weisse Kanten abwechseln - beginnend mit einer weissen Kante.
Lösung:
path (X,Y): − white (X,Y ) .
path (X,Y): − white (X,Y) , p2 (Y, Z ) .
p2 (X,Y): − b l a c k (X,Y ) .
p2 (X,Y): − b l a c k (X, Z ) , path (Z ,Y ) .
5. Definieren Sie ein ist − M enge-Prädikat, um nur Prolog-Listen zu erhalten, in denen jedes Element mindestens ein Mal vorkommt.
Lösung:
mylistmember (H , [ H|T ] ) .
mylistmember (X , [ H|T] ) : − mylistmember (X,T ) .
myset ( [ ] ) .
myset ( [H|T] ) : − myset (T) , mylistmember (H,T ) .
3
Herunterladen