彼得根据天气预报决定周末做什么。
这是可获得的信息:周六是晴天,周日是不确定的。每当天气晴朗,彼得就去海滩。每逢下雨,他就呆在家里。当天气不确定时,这取决于天气:星期六他去看电影,星期天他和家人出去散步。
用Prolog表示前面的句子。
制定允许回答以下问题的查询:
彼得下星期六要做什么?
彼得下个星期天会呆在家里吗?
下面是我写的代码,它不能工作:
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).但它不起作用。如果有人能帮我,那就太好了。
发布于 2011-09-27 21:07:19
它不起作用的主要原因是你不能统一你的事实。如果从查询而不是程序的角度来考虑prolog程序,那么构建prolog程序会更容易。在您的代码中,您没有匹配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的偏好指定为另一个过程(主要是为了清楚起见)。然后,我们可以查询事实,并获得(更有可能)您所想的结果。
https://stackoverflow.com/questions/7569337
复制相似问题