В моей базе данных есть следующие факты и правила.
above(b, a).
above(c, b).
above(d, c).
above(X,Y):-above(X,Z),above(Z,Y).
below(X,Y):- above(Y,X).
Это работает так, как предназначено для положительного случая, поэтому, если я сделаю запрос,
above(c,a).
Возвращаемое значение - True.Однако, когда я попробовал запрос ниже, ожидая Ложь,
above(a,c).
Я получил сообщение,
Stack sizes: local: 0.2Gb, global: 16Kb, trail: 3Kb
Stack depth: 2,839,964, last-call: 0%, Choice points: 12
Probable infinite recursion (cycle):
[2,839,964] above(a, _1394)
[2,839,963] above(a, _1420)
Насколько я понял, поскольку атома нетX связан с above(a,X).
, и действительно этот запрос возвращает False, первое условие моего правила не будет выполнено, и этого будет достаточно, чтобы сделать вывод, что запрос является False.Похоже, что это не так.Как я могу настроить правила так, чтобы они возвращали False, все еще работая, как предназначено для положительных случаев?