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