我需要你的帮助一个简单的PROLOG程序。我对PROLOG非常陌生,所以这可能是一个非常琐碎的问题,但我绝对不知道如何解决它。
有5句话我需要写成PROLOG代码:
-Bill拥有一只狗。 -Every狗主人喜欢动物。 喜欢动物的-Every人不能打动物。 -Bill或Bull打了一只叫汤姆的猫。 -Every猫是一种动物。
我想我有前三句话:
dogowner(bill).
lovesanimal(X):- dogowner(X).
not(hitting(X,animal(Y))):-lovesanimal(X).最后一个问题也不是问题。但我该怎么制定第四条呢?
谢谢你的帮助。
发布于 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))。
上面写着“每个喜欢东西的人都打不上这东西”
https://stackoverflow.com/questions/47444261
复制相似问题