Logikbasierte Programmierung

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Prolog</language>
Die folgenden Aufgaben beziehen sich direkt auf die in der Vorlesung verwendete Linienfhrung und die vorgestellten Beispiele. Es empfiehlt sich also das Sktipt durchzuarbeiten, die Beispiele dazu sind jedoch in Prolog geschrieben.

==Begriffe==
Wiederholen Sie die Begriffe Relation und Prädikat aus der Mathematik.

==Personen==
===Mann===
Hier ein Beispiel für Prolog, es beschreibt die Mann Relation aus der Vorlesung,
die Syntax für eine Relation ist <tt> <relation>(<wert>[,<werte>]).</tt>
<code>
mann(adam).
mann(tobias).
mann(frank).
</code>

Mit der Syntax <tt><realtion>(<wert>).</tt> kann man abfragen ob ein Wert zu dieser Relation gehört.

'''Hinweis in Prolog wird <tt>?-</tt> Voran gestellt was hier aber durch die Ausführungsbox Automatisch geschieht

<eval>mann(tobias).</eval>
<eval>mann(heinrich).</eval>

===Frau===
Definieren Sie eine einstellige Relation frau nach dem Vorbild von mann mit
den Elementen eva, daniela und ulrike.
<code>%frau</code>
<eval>woman(daniela).</eval>

===Mutter===
<code>
mutter(eva,tobias).
mutter(daniela,frank).
mutter(daniela,ulrike).
</code>
<eval>mutter(eva,tobias).</eval>
<eval>mutter(ulrike,tobias).</eval>

===Vater===
Definieren Sie eine zweistellige Relation vater nach dem Vorbild von mutter.
Beziehungen
{|
!Vater!Sohn
|-
|adam|tobias
|-
|tobias|frank
|-
|tobias,ulrike
|}
<code>%Vater</code>
<eval>vater(tobias,frank).</eval>

===Großvater=== 
Fragen Sie nach dem Namen des Großvaters von Frank. Gibt es weitere
Großväter, die sich aus unserer Wissensbasis ermitteln lassen?

'''Hinweis:''' Sie müssen dazu eine Regel erstellen die angiebt welche Regeln es zu befolgen gibt um den Großvater zu ereichen, in Prolog können sie auch mit einen Namen mehre regeln Verbinden.
 
'''Syntax '''

 regelname(<variable>,[variablen]) :- 
 :relation(<variable>,[variablen])
 :[,relationen(<variable>,[variablen])].

<code>%Großvater</code>
<eval>grossvater(X,frank).</eval>