Частичное упорядочение XSB Prolog

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

Решение

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

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

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

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

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

:- table sp(_,_,po(<)).
Другие вопросы по тегам