Дополнительный «ложный» в конце запроса

голоса
0

В основном , я задаюсь вопросом , почему один из моих определений для нового предиката gрезультатов в моем запросе заканчивающихся ти «Ложное», в то время как другое определение прыгает прямо обратно «-».

Учитывая базу данных, как это:

f(a,b).
f(b,c).
f(c,d).

Я хочу , чтобы произвести новый предикат , который представляет своего рода транзитивного замыкания из fс того , что он должен также включать в себя перечень того , как был создан элемент. Т.е. я хочу gтаким образом, что ?- g(X,Y,Z).будет производить это:

g(a,c,[f(a,b),f(b,c)]).
g(b,d,[f(b,c),f(c,d)]).
g(a,d,[f(a,b),f(b,c),f(c,d)])

Я ввести вспомогательную конкатенации предикат:

con([],L,L).
con([X|L1],L2,[X|C]):-con(L1,L2,C).

И тогда моя попытка решения будет:

g(X,Z,[f(X,Y),f(Y,Z)]):-f(X,Y),f(Y,Z).
g(X,Z,C):-f(Y,Z),g(X,Y,L),con(L,[f(Y,Z)],C).

В то время как правильный выход производится в конце дополнительный false.печатаются:

?-g(X,Y,Z).
X = a,
Y = c,
Z = [f(a, b), f(b, c)] ;
X = b,
Y = d,
Z = [f(b, c), f(c, d)] ;
X = a,
Y = d,
Z = [f(a, b), f(b, c), f(c, d)] ;
false.

В то время как простое определение, как это:

g(X,Y):-f(X,Y).

производит

g(a,b).
g(b,c).
g(c,d).

без «ложной».

Означает ли это, моя программа есть ошибка? Если да, то что это?

Задан 07/11/2018 в 23:41
источник пользователем
На других языках...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more