Prolog中的简单推导

时间:2018-06-18 10:02:55

标签: prolog

我对Prolog有疑问。

我想在Prolog中获得这样的结果:

enter image description here

我还不清楚的是:因为CanFly(超人)必须是一个术语,在这种情况下是一个函数。有可能实现这种推导吗?

1 个答案:

答案 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.