3

我正在阅读Learn Prolog Now , 1.1.2 Knowledge Base 2,他们在其中写了关于将 modus ponens 的使用链接在一起的内容。

KB2.pl 文件:

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

查询时:

playsAirGuitar(yolanda).

提交给gprolog,它应该是response的yes,因为它应该能够从yolanda高兴的事实中推断出来。

但 gprolog 以no. 这是为什么?

4

1 回答 1

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
于 2011-08-05T20:42:11.867 回答