Prolog 定义规则时使用分号

Prolog 定义规则时使用分号,prolog,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). 如果兄弟(X,Y)或姐妹

我是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).

如果兄弟(X,Y)或姐妹(X,Y)是真的,则评估为真?

正如潜伏者所说,
/2
是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)
    ).
,是和(连词)

; 是或(即析取)

是,
基本上是指或。谢谢。固定的。