Künstliche Intelligenz und Prolog
Copyright © 2019 Jiri Kriz, www.nosco.ch

1    Grundlagen

Lösung der Aufgaben

1.1    Familien­beziehungen

elter( Vater, Kind) :-
    vater( Vater, Kind).
elter( Mutter, Kind) :- 
    mutter( Mutter, Kind).
eltern( Vater, Mutter, Kind) :- 
     vater( Vater, Kind), 
     mutter( Mutter, Kind).
kind( Kind, Elter) :- 
    elter( Elter, Kind).
sohn( S, E) :- 
    kind( S, E), 
    mann( S).
tochter( T, E) :- 
    kind( T, E), 
    frau( T).
opa( GV, Enkel) :- 
    elter( E, Enkel), 
    vater( GV, E).
oma( GM, Enkel) :- 
    elter( E, Enkel), 
    mutter( GM, E).
enkel( Enkel, G) :- 
    elter( E, Enkel), 
    elter( G, E).
bruder( Bruder, Geschwister) :- 
    eltern( Vater, Mutter, Bruder), 
    eltern( Vater, Mutter, Geschwister), 
    mann( Bruder), 
    Bruder \= Geschwister.
schwester( Schwester, Geschwister) :- 
    eltern( Vater, Mutter, Schwester),
    eltern( Vater, Mutter, Geschwister), 
    frau( Schwester), 
    Schwester \= Geschwister.
onkel( O, N) :- 
    elter( E, N), 
    bruder( O, E).
tante( T, N) :- 
    elter( E, N), 
    schwester( T, E).

/* gatte( Mann, Frau) kann nicht durch eine Regel,
   sondern muss durch Fakten definiert werden 
*/

Back to example 1.1

1.2    Eine kleine Überlegung

moechte_frieden( X) :- 
    mensch( X).
mensch( X) :- mann( X).
mensch( X) :- frau( X).
mensch( X) :- kind( X).
mann( ich).

Back to example 1.2

1.3    Eine kleine Welt

moebel( schrank, 1).
moebel( buechergestell, 1).
moebel( bett, 1).
moebel( tisch, 1).
moebel( stuhl, 1).

/* Frage 1: ?- moebel( X) */
moebel( X) :- moebel( X, N).

/* Frage 2: ?- anzahl( Objekt, Anzahl) */
anzahl( X, N) :- moebel( X, N).
anzahl( tuer, 1).
anzahl( fenster, 2).

/* Frage 5: ?- an( An, Objekt) */
an( wand1, schrank).
an( wand1, tuer).
an( wand2, buechergestell).
an( wand2, bett).
an( wand3, bett).
an( wand3, fenster1).
an( wand3, tisch).
an( wand4, tisch).
an( wand4, fenster2).
an( wand4, schrank).
an( fenster1, bett).
an( fenster2, tisch).

/* Frage 6: ?- in( Ort, Objekt) */
in( ecke1, schrank). 
in( ecke3, bett).
in( ecke4, tisch).

/* Frage 3: ?- ort( Objekt, Ort) */
ort( X, P) :- an( P, X). 
ort( X, P) :- in( P, X).
ort( stuhl, bei_tisch).

/* Frage 4: ?- links( Objekt1, Objekt2) */
links( tuer, buechergestell).
links( buechergestell, bett).
links( bett, tisch).
links( tisch, schrank).
links( schrank, tuer).

/* Frage 4: ?- rechts( Objekt1, Objekt2) */
rechts( X, Y) :- links( Y, X).

Back to example 1.3