2015-05-10 103 views
0

我目前正在鑽研Prolog,但來自JavaScript背景很多似乎很奇怪。例如,我有這樣一個定義:Prolog中的執行順序:;運算符

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

然而,執行結果並不如預期。但是,當使用parantheses時。

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

這似乎很奇怪,我,因爲,是一個分隔符所以括號就沒有必要。 Prolog中的禁忌究竟是什麼?請記住,我對Prolog非常陌生。

回答

1

,有一個較低的precedence value;。這意味着在序言,是,像

X ; Y , Z 

的表達式被解釋爲

X ; (Y , Z) 

將它們組合到周圍的其他方法,你必須使用括號:

(X ; Y) , Z 
+0

」不是個這很奇怪,考慮到','只是列表的分隔符,而';'是一個真正的操作符? –

+1

逗號也是一個操作符。嘗試查詢'current_op(Priority,Type,',')。' –

+0

@repeat,是的,它的確如此。 – lurker