Как получить более сложную теорию на Aleph с помощью SWI-Prolog? - PullRequest
0 голосов
/ 10 июля 2020

Я устал использовать Алеф для получения теории, но у меня только одна голова с одним телом, на самом деле я хочу больше тел.

Мой входной файл:

:- use_module(library(aleph)).
:- if(current_predicate(use_rendering/1)).
:- use_rendering(prolog).
:- endif.
:- aleph.
:- modeh(*,attr2col(+attribute)).
:- modeb(*,type(+attribute,-class)).
:- modeb(*,attrs(+class,+attribute)).

:-determination(attr2col/1, type/2).
:-determination(attr2col/1, attrs/2).


:-begin_bg.
class(clerk).
class(manager).
attribute(boss).
attribute(notype).
attribute(noattrs).
attrs(manager,boss).
attrs(manager,notype).
type(notype,manager).
type(boss,manager).
:-end_bg.

:-begin_in_pos.
attr2col(boss).
attr2col(notype).
:-end_in_pos.

:-begin_in_neg.
attr2col(clerk).
attr2col(manager).
:-end_in_neg.

:-aleph_read_all.

и мой результат:

attr2col(A) :-
   type(A,B).

Я хочу:

attr2col(A) :- attribute(A), attrs(B,A), type(A,C).

Теперь есть только одно тело, но я хочу три. И есть «атрибут (A)» в качестве тела, как можно добавить такую ​​вещь только с одной переменной?

1 Ответ

0 голосов
/ 26 июля 2020

Вы можете попробовать следующее:

  1. Добавьте объявление режима и определение для вашего предиката attribute.

  2. Попробуйте различные комбинации + и - в объявлениях режима

  3. Убедитесь, что все литералы в теле желаемого предложения действительно необходимы для правильного прогнозирования результата.

Ура / JCR

...