Prolog 中的执行顺序: ;操作员

Execution order in Prolog: ; operator

我目前正在研究 Prolog,但来自 JavaScript 的背景似乎很奇怪。例如,我有这样的定义:

np # Subject,
pp # IObject ; np # IObject,

然而,在执行过程中,结果并不如预期。但是当使用括号时它是。

np # Subject,
(pp # IObject ; np # IObject),

这对我来说似乎很奇怪,因为 , 是一个分隔符,因此不需要括号。 Prolog 中的括号到底是做什么的。请记住,我是 Prolog 的新手。

,precedence value 低于 ;。这在 Prolog 中意味着,像

这样的表达式
X ; Y , Z

被解释为

X ; (Y , Z)

要将它们反过来分组,您必须使用括号:

(X ; Y) , Z