为什么gprolog不会联合使用modus ponens?

时间:2011-08-05 20:12:37

标签: prolog gnu-prolog

我正在阅读Learn Prolog Now 1.1.2知识库2 ,他们写了关于联合使用modus ponens的内容。

KB2.pl文件:

listensToMusic(mia).
happy(yolanda).
playsAirGuitar(mia) :- listensToMusic(mia).
playsAirGuitar(yolanda) :- listensToMusic(yolanda).
listensToMusic(yolanda) :- happy(yolanda).

查询时:

playsAirGuitar(yolanda).

被提交给gprolog,它应该回复yes,因为它应该能够从yolanda很高兴的事实推断它。

但gprolog以no回复。那是为什么?

1 个答案:

答案 0 :(得分:2)

我认为问题在于谓词listensToMusic / 1的子句是分开的。

以下代码为我返回yes:

listensToMusic(mia).
listensToMusic(yolanda) :- happy(yolanda).
happy(yolanda).
playsAirGuitar(mia) :- listensToMusic(mia).
playsAirGuitar(yolanda) :- listensToMusic(yolanda).

你应该收到像

这样的警告
warning: discontiguous predicate listensToMusic/1 - clause ignored