首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将日常语言写成PROLOG

将日常语言写成PROLOG
EN

Stack Overflow用户
提问于 2017-11-22 21:40:12
回答 1查看 116关注 0票数 0

我需要你的帮助一个简单的PROLOG程序。我对PROLOG非常陌生,所以这可能是一个非常琐碎的问题,但我绝对不知道如何解决它。

有5句话我需要写成PROLOG代码:

-Bill拥有一只狗。 -Every狗主人喜欢动物。 喜欢动物的-Every人不能打动物。 -Bill或Bull打了一只叫汤姆的猫。 -Every猫是一种动物。

我想我有前三句话:

代码语言:javascript
复制
dogowner(bill).
lovesanimal(X):- dogowner(X). 
not(hitting(X,animal(Y))):-lovesanimal(X).

最后一个问题也不是问题。但我该怎么制定第四条呢?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-25 16:12:28

“每只猫都是动物”:

动物(X) :- cat(X)。

“每个喜欢动物的人都不能打动物”:我认为使用not(打(X,动物(Y)可能会混淆.我预先使用:

击(X,Y) :-人(X),不(相思动物(X)),动物(Y)。

另一方面,你必须说出一些“事实”(在你的前提下没有解释)。

汤姆是只猫:

猫(汤姆)

比尔和布尔是人:

个人(条例草案)人(牛)

最后,谓词';‘在前缀符号中使用:

或(命中(比尔,汤姆),命中(公牛,汤姆))。

然而,这样的程序不告诉你谁(比尔或公牛),实际上打击汤姆。你需要这样的条款:

actually_hits(X,Y) :- can(击打(X,Y)),(或(命中(X,Y),);或(,命中(X,Y))。

最后,您可以希望程序更通用;因此,您可以用“like(X,Y)”来替换“相思动物(X)”:

喜欢(X,Y) :-狗主人(X),动物(Y)。

当然,这些规则必须改写为:

可以(打(X,Y)) :-人(X),而不是(喜欢(X,Y))。

上面写着“每个喜欢东西的人都打不上这东西”

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

https://stackoverflow.com/questions/47444261

复制
相关文章

相似问题

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