Prolog也回溯并执行其他语句

时间:2014-04-07 01:28:17

标签: prolog logic predicate

假设您有以下事实:

sister(susan, jane).
sister(karren,holtby).
parent_of(susan,karren).
parent_of(susan,holtby).

以下定义:

sibling(X, Y) :-
      sister(X, Y).

sibling(X, Y) :-
      parent_of(Z, X), parent_of(Z, Y).

为什么目标sibling(susan, jane)给出了真假然后是假的?是否使用了两种定义?

有没有办法只检查所有定义为真,如果是,则输出true?

1 个答案:

答案 0 :(得分:0)

Prolog是一种基于树的语言。让我们建立一个知识库

male(mark).
female(mary).
female(beth).
brother(mark, mary). %mark is the brother of mary
brother(mark, beth).

%define sister
sister(X,Y) :-
  female(X),
  male(Y),
  brother(Y,X).

在这种情况下,姐妹姐妹将被评估为:

  • 将玛丽绑定到X
  • 将标记绑定到Y
  • 检查兄弟(马克,玛丽)的知识库
  • 如果找到,则返回true
  • 将beth绑定到X
  • 将标记绑定到Y
  • 检查兄弟(标记,beth)的知识库
  • 如果找到则返回true
  • 不存在其他绑定,因此返回false

在Prolog中尝试了所有可能性。它会返回所有真实的情况,直到它找不到,然后它会自动返回false(即没有什么可以满足这个)。这是与prolog的力量和混淆。