我需要你帮助一个简单的PROLOG程序。我对PROLOG很新,所以这可能是一个非常微不足道的问题,但我绝对不知道如何解决它。
我需要在PROLOG代码中编写5个句子:
-Bill拥有一只狗。
- 每个狗主都喜欢动物。
- 每个喜欢动物的人都不能打动物。
-Bill或Bull击中了一只名叫汤姆的猫。
- 每只猫都是动物。
我想我有前3个句子:
dogowner(bill).
lovesanimal(X):- dogowner(X).
not(hitting(X,animal(Y))):-lovesanimal(X).
最后一个也不是问题。但是我如何制定第四个?
感谢您的帮助。
答案 0 :(得分:1)
"每只猫都是动物":
动物(X): - 猫(X)。
"每个喜欢动物的人都不能击中动物":我认为不使用(打(X,动物(Y)))可能会混淆...我优先使用:
可以(击中(X,Y)): - 人(X),而不是(lovesanimal(X)),动物(Y)。
另一方面,你必须说出程序中的几个事实' (在你的场所没有说明)
汤姆是一只猫:比尔和公牛是人:猫(TOM)。
人(草案)。 人(牛)。
最后,谓词''用于预先固定的表示法:
或(击中(比尔,汤姆),击中(公牛,汤姆))。
然而,这样的程序并没有告诉你(比尔或公牛)实际上是在击中汤姆。你需要这样一个条款:
actual_hits(X,Y): - can(击中(X,Y)),(或(击中(X,Y),);或(,命中(X,Y))
最后,你可以希望程序更加通用;所以,你可以重新制定爱情动物(X)'通过'喜欢(X,Y)':
喜欢(X,Y): - dogowner(X),animal(Y)。
当然,规则必须重新制定为:
可以(击中(X,Y)): - 人(X),而不是(喜欢(X,Y))。
其中说"每个喜欢某事的人都不能打这个东西''