Prolog - 决议

时间:2015-07-24 18:01:55

标签: prolog logic resolution

我在正式逻辑中使用真值表和prolog程序进行分辨率证明我的实验的结果是不同的,我想知道为什么。

这是普通英语的问题: 如果有人看着斗士的眼睛,他会生气。 如果战斗机生气,他就会打拳。

如果战斗机打了一拳,有人会看到战斗机的眼睛吗?

'战斗机打孔'是结论,我们知道当结论是真的时,这个前提可能是假的,也可能是真的,因此我们无法回答这个问题。

然而,在SWI prolog程序之后返回true:

eyes:-angry.
angry:-punch.
punch.
?-eyes.
True

另外

aggregate_all(count, (eyes), Count) 
1

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:3)

请记住,Prolog中的:-应该看起来像箭头 - 从右到左的箭头 ,如<==。 (我们实际上并没有使用箭头,因此用户可以自由定义自定义运算符并将其用于自己的目的,而不会干扰常规的Prolog代码。)

因此,你所有的箭头指向错误的方向。你可能意味着:

angry(true) :- eyes(true).

punch(true) :- angry(true).

我为这些谓词引入了一个布尔参数,以便您可以使用不同的参数,而不必担心(非)存在任何谓词。

例如,如果您添加到这些子句:

eyes(true).

然后你得到:

?- punch(T).
T = true.

但是,如果您改为添加:

eyes(false).

然后你得到:

?- punch(T).
false.

这表明是的,有人必须看着那个人。