Прогнозы погоды - PullRequest
       15

Прогнозы погоды

1 голос
/ 27 сентября 2011

Питер решает, что делать в выходные дни в соответствии с прогнозами погоды.

Это доступная информация: суббота будет солнечной, воскресенье будет неопределенным.когда бы ни было солнечно, Питер идет на пляж.Всякий раз, когда идет дождь, он остается дома.Когда погода неясная, это зависит от дня: по субботам он идет в кино, по воскресеньям гуляет со своей семьей.
Представьте в прологе предыдущие предложения.
Сформулируйте запросы, позволяющие ответить на следующие вопросы:
Что будет делать Питер в следующую субботу?
Останется ли Питер дома в следующее воскресенье?
Вот код, который я сделал, и он не работает:

out(saturday,suny,_). 
out(sunday,uncertain,_).

out(saturday,sunny,beach).
out(sunday, sunny, beach).
out(saturday,rainny,home).
out(sunday, rainny,home).


out(saturday,uncertain,cinema).
out(sunday,uncertain,family).

Теперь яя не знаю, какие запросы мне следует задавать, чтобы ответить на вопросы .... Я думаю, что я мог бы сделать что-то вроде этого:

:-out(saturday,_,X).

Но это не работает ... Если кто-нибудь может мне помочьбыло бы здорово.

1 Ответ

2 голосов
/ 27 сентября 2011

Основная причина, по которой это не работает, заключается в том, что вы не можете объединить свои факты.Проще создавать прологичные программы, если вы думаете о них как о запросе, а не как о программе.В вашем коде есть совпадение suny и sunny.если вы исправите эту орфографическую ошибку, вы получите следующее:

?- out(saturday,_,X).
true ;
X = beach ;
X = home ;
X = cinema ;
true.

Что, вероятно, все еще не то, что вы хотите, потому что оно все еще соответствует слишком многим вещам.попробуйте это вместо:

weather(saturday, sunny).
weather(sunday, uncertain).

prefers(peter, if_weather(uncertain), onday(sunday), walk_with_family).
prefers(peter, if_weather(sunny), onday(_), go_to_beach).
prefers(peter, if_weather(uncertain), onday(saturday), go_to_cinema).
prefers(peter, if_weather(rainy), onday(_), stay_home).

peter_will_do_next(Day,X) :- prefers(peter, if_weather(Y), onday(Day), X),    weather(Day,Y).
peter_will_stay_home_on(Day) :- peter_will_do_next(Day,Y), Y == stay_home.

?- peter_will_do_next(saturday,What).
What = go_to_beach .

?- peter_will_stay_home_on(sunday).
false.

В этом коде мы указываем факты погоды как одну процедуру и предпочтения peter в пыльнике (в основном для ясности).Затем мы можем запросить факты и получить результат, который (более вероятно), что вы имели в виду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...