2016-07-07 9 views
0

Wenn ich die folgenden Prolog Fakten:Prolog-Regel für Objekte mit Menschen bewegen, die sie haben

person(mary). 
object(ball). 
location(bedroom). 
location(bathroom). 

Und diese Klausel:

go(mary,bedroom). 
get(mary,ball). 
go(mary,bathroom). 

Ich brauche eine Regel, die zeigt, dass der Ball reist mit "Maria." Wenn gefragt, sollte Prolog antworten, dass der Ball im Badezimmer ist. Ich habe versucht, die folgenden Regeln, aber sie hat nicht funktioniert:

has(X,Y) :- get(X,Y). 
whereIs(P,R) :- has(P,Q),go(P,R). 

Was wäre ein besserer Regelsatz sein, diese Beziehung auszudrücken zwischen zwischen Objekten mit und Reisen in verschiedenen Räumen?

+0

Warum haben has() wenn es dasselbe wie get() sein soll? Du kannst auch '_' anstelle von Q setzen, da es nicht nötig zu sein scheint. – rnso

+0

Welche Art von Abfrage erwarten Sie und welche Art von Ergebnissen? Du sagst, du brauchst eine Regel, die * zeigt, dass der Ball mit "mary" * reist. Welche Art von Output erwarten Sie genau, um dies zu zeigen? Oder brauchst du wirklich nur eine Regel, die dir sagt, wo der Ball ist? Das sind nicht die gleichen Dinge, obwohl man das andere implizieren könnte. – lurker

+0

Wo möchten Sie, dass Ihre Fakten ins Spiel kommen? Ihr Beispielcode verwendet sie nicht. – lurker

Antwort

1

folgende Arbeiten:

person(mary). 
object(ball). 
location(bedroom). 
location(bathroom). 

go(mary,bedroom). 
get(mary,ball). 
go(mary,bathroom). 

whereIs(R) :- findall(R,(get(P,Q),go(P,R)),L), last(L,R),!. 

Auf Befehl:

?- whereIs(R). 
R = [bathroom]. 

Im Grunde wollen Sie alle Standorte der Person mit dem Ball zu finden und dann die letzte Position zu bestimmen.

Ich entfernte has(), da es im Wesentlichen das gleiche wie get() war.

+0

Vielen Dank! –

Verwandte Themen