在 prolog 中表示关于信念的真相
Representing truth regarding beliefs in prolog
如何使这个(或类似的东西)在 Prolog 中工作:
belief(john,red(apple)).
belief(peter,red(apple)).
X :- belief(john,X), belief(peter,X).
并为以下查询获取 true.
(在咨询上述内容时):-
?- red(apple).
首先,当所有(相关)人都相信某事时,定义一个小帮手来捕捉是有用的:
all_believe(Belief) :-
belief(john, Belief),
belief(peter, Belief).
然后你可以定义,例如:
red(Object) :-
all_believe(red(Object)).
green(Object) :-
all_believe(green(Object)).
根据你给定的信念,你会得到:
?- red(apple).
true.
?- green(apple).
false.
这行得通。它要求您为要用作信念的任何术语定义类似的规则。
您可以使用 term_expansion
:
的宏定义使其更短一些
term_expansion(declare_belief(Belief),
Belief :- all_believe(Belief)).
这意味着您的源代码中的每个顶级定义 declare_belief(Belief)
都应该被视为您已经编写了 Belief :- all_believe(Belief)
(适当地替换了变量 Belief
).
所以现在你可以这样写:
declare_belief(red(_)).
declare_belief(green(_)).
并且它的处理方式与上面 red(Object)
和 red(Object)
的较长定义完全相同。对于您想要用作可能信念的任何术语,您仍然必须编写此类声明。
Prolog 不允许规则的 head 只是一个变量。头部必须是一个 nonvar 项,其仿函数(即名称和元数)标识正在定义的谓词。所以,一个可能的解决方案是这样的:
true_belief(X) :-
belief(john, X),
belief(peter, X).
belief(john, red(apple)).
belief(peter, red(apple)).
示例:
?- true_belief(red(apple)).
true.
?- true_belief(X).
X = red(apple).
如何使这个(或类似的东西)在 Prolog 中工作:
belief(john,red(apple)).
belief(peter,red(apple)).
X :- belief(john,X), belief(peter,X).
并为以下查询获取 true.
(在咨询上述内容时):-
?- red(apple).
首先,当所有(相关)人都相信某事时,定义一个小帮手来捕捉是有用的:
all_believe(Belief) :-
belief(john, Belief),
belief(peter, Belief).
然后你可以定义,例如:
red(Object) :-
all_believe(red(Object)).
green(Object) :-
all_believe(green(Object)).
根据你给定的信念,你会得到:
?- red(apple).
true.
?- green(apple).
false.
这行得通。它要求您为要用作信念的任何术语定义类似的规则。
您可以使用 term_expansion
:
term_expansion(declare_belief(Belief),
Belief :- all_believe(Belief)).
这意味着您的源代码中的每个顶级定义 declare_belief(Belief)
都应该被视为您已经编写了 Belief :- all_believe(Belief)
(适当地替换了变量 Belief
).
所以现在你可以这样写:
declare_belief(red(_)).
declare_belief(green(_)).
并且它的处理方式与上面 red(Object)
和 red(Object)
的较长定义完全相同。对于您想要用作可能信念的任何术语,您仍然必须编写此类声明。
Prolog 不允许规则的 head 只是一个变量。头部必须是一个 nonvar 项,其仿函数(即名称和元数)标识正在定义的谓词。所以,一个可能的解决方案是这样的:
true_belief(X) :-
belief(john, X),
belief(peter, X).
belief(john, red(apple)).
belief(peter, red(apple)).
示例:
?- true_belief(red(apple)).
true.
?- true_belief(X).
X = red(apple).