我正在阅读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
回复。那是为什么?
答案 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