与拥有它们的人一起移动的对象的Prolog规则

时间:2016-07-07 14:12:05

标签: prolog rule

如果我有以下Prolog事实:

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

这个条款:

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

我需要一条规则,表明球与“玛丽”一起旅行。如果询问,Prolog应该回答球是在卫生间。我尝试了以下规则,但它们不起作用:

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

在表达对象和前往不同房间之间的这种关系有哪些更好的规则?

1 个答案:

答案 0 :(得分:1)

以下作品:

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),!.

开启命令:

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

基本上,你想找到带球的人的所有位置,然后确定最后的位置。

我删除了has(),因为它与get()基本相同。