Частичное упорядочение XSB Prolog - PullRequest
0 голосов
/ 20 ноября 2011

Я пытаюсь привести пример из руководства 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)).

Ответы [ 2 ]

2 голосов
/ 20 ноября 2011

Я бы попробовал это (так как это синтаксическая ошибка)

:- 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 голосов
/ 20 ноября 2011

Странно, что оператор «перевернут» в сообщении об ошибке (или сообщение об ошибке теряет 1 символ?). Директива table может генерировать ошибку «inside» (директивы - это вызовы предикатов библиотеки), или ошибка может быть сгенерирована раньше, консультируясь.

Может быть синтаксическая ошибка из-за изменения в объявлении оператора (т. Е. Некоторые объявления, такие как op (N, xfx, <) или op (M, xfy, /), изменили N относительно M), или образец может быть выровнен по текущему Таблица / 3 спецификации. </p>

Я бы попробовал (аналогично тому, что предлагает thanosQR) простейшую вещь: изменить директиву и удалить (избыточный?) Указатель арности:

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