Prolog-Übung 3 25. 11. 2009 Aufgabe 1 Aufgabe 2 Aufgabe 3

Werbung
Prolog-Übung 3
25. 11. 2009
Aufgabe 1
Schreiben Sie ein Programm, das eine Liste de-dupliziert (d.h. mehrfach enthaltene
Elemente löscht):
[a, b, a, c] wird zu [a, b, c] oder [b, a, c].
Aufgabe 2
Schreiben Sie ein Programm, das jedes Element einer Liste verdoppelt, also [a, b, c] wird
zu [a, a, b, b, c, c].
Aufgabe 3
Implementieren Sie eine (stark vereinfachte) Ontologie des Herzens, welche folgende
Strukturen kennt:
•
•
•
•
•
•
•
•
tricuspidalklappe,
pulmonalklappe,
rechtesVorhofseptum,
rechteVorhofhoehle,
aortenklappe,
mitralklappe,
linkesVorhofseptum,
linkeVorhofhoehle
Sie können die Beziehungen der einzelnen Strukturen untereinander (welche Struktur ist
Teil einer anderen Struktur) hier nachlesen:
http://fme.biostr.washington.edu:8089/FME/index.html
Es soll mit Hilfe eines Prädikats teile_von/2 abgefragt werden können, aus welchen
Substrukturen eine bestimmte Struktur des Herzens (bzw. auch das ganze Herz)
zusammengesetz ist (natürlich wiederum stark vereinfacht!). Diese Substrukturen sollen in
Form einer Liste ausgegeben werden.
Z.B:
?- teile_von(herz,Y).
Y = [tricuspidalklappe, pulmonalklappe, rechtesVorhofseptum, rechteVorhofhoehle,
aortenklappe, mitralklappe, linkesVorhofseptum, linkeVorhofhoehle]
?- teile_von(linkesAtrium,Y).
Y = [linkesVorhofseptum, linkeVorhofhoehle].
Aufgabe 4
a) Beschäftigen Sie sich mit einigen vordefinierten Prädikaten in Prolog. Was machen die
Prädikate compound, atom, functor und arg?? Was ergeben die folgenden Ausdrücke
und warum?
?- compound(a).
?- atom(a).
?- compound(X).
?- atom(X).
?- compound(a(b)).
?- atom(a(b)).
?- compound([]).
?- atom([]).
?- compound([[]]).
?- atom([[]]).
?- functor(a, F, A).
?- functor(vater(michael, berger), F, A).
?- arg(1, vater(michael, berger), X).
?- arg(2, vater(michael, X), berger).
?- functor([], F, A).
?- functor([a], F, A).
?- arg(1, [a], X).
?- arg(2, [a], X).
?- arg(3, [a], X).
?- arg(1, [], X).
b) Schreiben Sie unter Zuhilfenahme dieser Prädikate ein Programm subterm(T1, T2), das
wahr ergibt, wenn T1 ein Unter-Term von T2 ist, also
z.B.
?- subterm(a, x(a)).
true
?- subterm(a, x(b)).
false
Sie dürfen dabei annehmen, dass keiner der Terme Variablen enthält.
Senden Sie die Ergebnisse für diese Übungsbeispiele sowie für die
beiden vorangegangenen Übungszettel bitte bis 10. 12. 2009 an
[email protected].
Herunterladen