我是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)为真,则评估为真吗?
答案 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(连词)
;是或(这是析取)