0

我正在尝试 XSB 版本 3.3.5 手册中的一个示例(来自“部分订单答案包含”):

:- 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)).
4

2 回答 2

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.
于 2011-11-20T07:28:21.853 回答
0

奇怪的是,错误消息中的运算符“反转”(或错误消息丢失了 1 个字符?)。table 指令可能会生成错误“inside”(指令是库谓词调用),或者在咨询之前可能会生成错误。

可能是由于运算符声明的更改而导致的语法错误(即一些声明,如 op(N,xfx,<) 或 op(M,xfy,/) 更改了 N 关于 M),或者样本可能在当前表/3 上未对齐规格。

我会尝试(类似于 thanosQR 的建议),最简单的方法是更改​​指令并删除(冗余?)arity 指示:

:- table sp(_,_,po(<)).
于 2011-11-20T08:26:39.693 回答