将日常语言表达为PROLOG

时间:2017-11-22 21:40:12

标签: prolog logic

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

我需要在PROLOG代码中编写5个句子:

  

-Bill拥有一只狗。

     

- 每个狗主都喜欢动物。

     

- 每个喜欢动物的人都不能打动物。

     

-Bill或Bull击中了一只名叫汤姆的猫。

     

- 每只猫都是动物。

我想我有前3个句子:

dogowner(bill).
lovesanimal(X):- dogowner(X). 
not(hitting(X,animal(Y))):-lovesanimal(X).

最后一个也不是问题。但是我如何制定第四个?

感谢您的帮助。

1 个答案:

答案 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))。

其中说"每个喜欢某事的人都不能打这个东西''