Adicional 'falso' no final da consulta

votos
0

Basicamente eu estou perguntando por que uma das minhas definições para um novo predicado gresultados em minha consulta terminando whith um 'falso', enquanto a outra definição pula direto de volta para '-?'.

Dado um banco de dados como este:

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

Eu quero produzir um novo predicado que representa algum tipo de fechamento transitivo de fcom a adição que também deve incluir uma lista de como o elemento foi criado. Ou seja, eu quero um gtal que ?- g(X,Y,Z).irá produzir o seguinte:

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)])

Eu apresento um predicado concatenação auxiliar:

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

E então a minha tentativa de uma solução seria:

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).

Enquanto a saída correcta é produzido, no final de um adicional false.é impresso:

?-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.

Considerando uma definição simples como isto:

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

produz

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

sem o 'falso'.

Quer isto dizer meu programa tem um erro? Se sim, o que é?

Publicado 07/11/2018 em 23:41
fonte usuário
Em outras línguas...                            

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