2011-11-20 116 views
0

我試圖從XSB版本爲例3.3.5手動(從 「部分以回答歸入」):XSB Prolog的部分順序製表

:- table sp(_,_,po(</2)). 
sp(X,Y,1):- edge(X,Y). 
sp(X,Z,N):- sp(X,Y,N1),edge(Y,Z),N is N1 + 1. 

而且我越來越

++Error[XSB/Runtime/P]: [Syntax] :- table sp (_ , _ , po (>/ <--- HERE? ************ 
++             2)) 

任何想法有什麼不對?

此外,還有與

:- table sp(_,_,lattice(min/3)). 

回答

2

沒有錯誤我想試試這個(因爲它是一個語法錯誤)

:- table sp(_,_,po('<'/2)). 
sp(X,Y,1):- edge(X,Y). 
sp(X,Z,N):- sp(X,Y,N1),edge(Y,Z),N is N1 + 1. 
0

很奇怪的是,操作人員錯誤消息「逆轉」(或錯誤消息是否有1個字符?)。 table指令可能會在內部生成錯誤(指令是庫謂詞調用),或者可能會在查詢之前生成錯誤。

可能是由於運算符聲明中的變化而引起的語法錯誤(即某些聲明如op(N,xfx,<)或op(M,xfy,/)改變N關於M),或者樣本可能未對齊當前表格/ 3規格。

我想嘗試(類似於thanosQR建議),最簡單的事情,改變指令和移除(冗餘?)元數的指示:

:- table sp(_,_,po(<)).