2016-07-07 3 views
0

Если у меня есть следующие Пролога факты:Пролог правило для объектов, движущихся с людьми, которые их

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

Что бы лучше набор правил, чтобы выразить эту связь между между наличием объектов и путешествий в разных комнатах?

+0

Почему у него есть(), если оно должно быть таким же, как get()? Также вы можете поставить «_» вместо Q, так как это, похоже, не требуется. – rnso

+0

Какой запрос вы хотите ввести и какие результаты? Вы говорите, что вам нужно правило, которое * показывает, что мяч перемещается с помощью «mary» *. Какой результат вы ожидаете, чтобы показать это? Или вам действительно нужно правило, которое говорит вам, где находится мяч? Это не одно и то же, хотя можно предположить и другое. – lurker

+0

Где вы хотите, чтобы ваши факты вступали в игру? Ваш примерный код не использует их. – lurker

ответ

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().

+0

Большое вам спасибо! –

Смежные вопросы