假设我们有这样的序言知识库:
guilty(X) :-
commits(X,Y),
crime(Y).
crime(murder).
crime(theft)
当我问这个问题时:
?- guilty(john)
我希望 Prolog 能问我这样的问题:
is commits(john, murder) ?
然后我回答不
is commits(john, theft) ?
如果我回答是 Prolog 说
**yes**
我怎样才能做出这样的东西?
谢谢..
最佳答案
您需要一个改进的证明引擎,当遇到未知事实时向用户查询。
用一些通用性来做它可能是一项有趣的任务,Google for metainterpreter Prolog,如果你对这个论点感兴趣,第一个链接为你提供了有值(value)的页面 A Couple of Meta-interpreters in Prolog由 Markus Triska 撰写,您可以在此处了解更多信息。
对于你的问题,一条规则就足够了
commits(Person, Crime) :-
crime(Crime),
format('is ~w ?', [commits(Person, Crime)]),
read(yes).
测试:
?- guilty(john).
is commits(john,murder) ?no.
is commits(john,theft) ?yes.
true.
注意 read/1 需要一个点来终止输入。
关于prolog - 我如何向我提供 Prolog 提问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11485750/