首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >天气预报

天气预报
EN

Stack Overflow用户
提问于 2011-09-27 20:44:48
回答 1查看 1.1K关注 0票数 1

彼得根据天气预报决定周末做什么。

这是可获得的信息:周六是晴天,周日是不确定的。每当天气晴朗,彼得就去海滩。每逢下雨,他就呆在家里。当天气不确定时,这取决于天气:星期六他去看电影,星期天他和家人出去散步。

用Prolog表示前面的句子。

制定允许回答以下问题的查询:

彼得下星期六要做什么?

彼得下个星期天会呆在家里吗?

下面是我写的代码,它不能工作:

代码语言:javascript
复制
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).

现在我不知道我应该做什么查询来回答这些问题……我想我可能会这样做:

代码语言:javascript
复制
:-out(saturday,_,X).

但它不起作用。如果有人能帮我,那就太好了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-27 21:07:19

它不起作用的主要原因是你不能统一你的事实。如果从查询而不是程序的角度来考虑prolog程序,那么构建prolog程序会更容易。在您的代码中,您没有匹配suny和sunny。如果你纠正了拼写错误,你会得到如下结果:

代码语言:javascript
复制
?- out(saturday,_,X).
true ;
X = beach ;
X = home ;
X = cinema ;
true.

这可能仍然不是你想要的,因为它仍然匹配太多的东西。试着这样做:

代码语言:javascript
复制
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的偏好指定为另一个过程(主要是为了清楚起见)。然后,我们可以查询事实,并获得(更有可能)您所想的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7569337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档