假设您有以下事实:
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?
答案 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).
在这种情况下,姐妹姐妹将被评估为:
在Prolog中尝试了所有可能性。它会返回所有真实的情况,直到它找不到,然后它会自动返回false(即没有什么可以满足这个)。这是与prolog的力量和混淆。