彼得根据天气预报决定周末要做什么。
这是可用的信息:
周六将是晴天,周日将不确定。
每当天气晴朗时,彼得都会去海滩。
每当下雨,他就呆在家里。
当天气不确定时,取决于当天:周六他去看电影,星期天和家人一起散步。
在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).
但它不起作用...... 如果有人能帮助我那将是伟大的。
答案 0 :(得分:2)
它不起作用的主要原因是你不能统一你的事实。如果你从查询而不是程序的角度考虑它们,那么构建prolog程序会更容易。在你的代码中,你有匹配的阳光和阳光。如果你修复了拼写错误,你会得到这个:
?- 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.
在此代码中,我们将天气的事实指定为一个程序和彼此的彼得的偏好(主要是为了清晰)。然后我们可以查询事实并得到一个(更有可能)你想到的结果。