定义规则时的分号

时间:2018-11-30 00:03:32

标签: prolog

我是Prolog的新手,正在阅读简单的Prolog代码行:

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

我知道是不是

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

这意味着兄弟(X,Y)和姐妹(X,Y)必须为真,而兄弟(X,Y)为真。这使我相信“​​;”代表or运算符,将:

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

如果brother(X,Y)或sister(X,Y)为真,则评估为真吗?

2 个答案:

答案 0 :(得分:2)

正如潜伏者所说,;/2是Prolog目标分离控制构造。顺便说一句,Prolog编码指南针对以下条款提出建议:

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

建议的替代方法是:

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

但是,如果您确实在子句的主体中使用了析取,请务必在括号之间写上它。在这种情况下:

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

答案 1 :(得分:0)

, is and(连词)
;是或(这是析取)