Частичное упорядочение 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(<)).