правило транзитивности базы знаний - PullRequest
0 голосов
/ 10 мая 2018

У меня есть эта база знаний:

implements(expression, funcall).
implements(expression, identifier).
implements(specialForm, conditional).
implements(literal, boole).

extends(expression, specialForm).
extends(expression, literal).
extends(value, literal).

has(conditional, condition, expression).
has(conditional, consequent, expression).
has(conditional, alternative, expression).
has(funcall, operator, identifier).
has(funcall, operands, expression).

%if class/interface X depends on class/interface Y.
%dep(X,Y):- X=Y.
dep(X,Y):- extends(Y,X).
dep(X,Y):- has(X,_,Y).
dep(X,Y):- implements(X,Y).

depends(X,Y):- X = Y.
depends(X, Y) :- dep(X,Y).
depends(X, Y) :- dif(Z,Y), dep(X,Z),depends(Z,Y).

image

метод deps просто проверяет, расширяются ли эти значения, реализуют или имеют одно другое.Метод зависимости заключается в проверке зависимостей, где требуется более 1 ссылки.Например, логическое выражение должно зависеть от выражения, но если я вызываю зависимую функцию (логическое выражение, выражение), я получаю значение false.Почему?

1 Ответ

0 голосов
/ 10 мая 2018

У вас есть чувство literal/2 в вашей реализации dep/2.

Вместо:

dep(X, Y) :- implements(X, Y).

Вы должны иметь:

dep(X, Y) :- implements(Y, X).

Вам также следует избавиться от depends(X, Y) :- X = Y., если у вас нет особых причин для рефлексии depends/2.Но в контексте вашей проблемы было бы странно говорить, например, что «Число зависит от числа».

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