答案 0 :(得分:0)
是的,这是可能的,但需要进行调整。路易斯知道克拉克肯特可以飞,如果她知道超人可以飞,而克拉克肯特是超人的秘密身份。在Prolog中说superman = clarckent
是不可能的,它们不是一回事。更准确地说,他们是同一个人的两个名字,所以我使用aka
,因为“也称为”:
% Knowledge base, what Lois knows
knows(lois, can_fly(superman)).
knows(lois, aka(clark_kent, superman)).
% Rule: How Lois knows Clark Kent can fly
knows(lois, can_fly(clark_kent)) :-
knows(lois, aka(clark_kent, superman)),
knows(lois, can_fly(superman)).
然后你可以编写如下的查询:
?- knows(lois, can_fly(clark_kent)).
true.
?- knows(lois, can_fly(X)).
X = superman ;
X = clark_kent.