Aanvullende 'false' einde zoekopdracht

stemmen
0

In principe Ik vraag me af waarom een van mijn definities voor een nieuw predicaat gresultaten in mijn vraag eindigend breken een 'vals', terwijl de andere definitie direct terug naar sprongen '-?'.

Gegeven een database als volgt uit:

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

Ik wil een nieuwe predicaat die een soort transitieve afsluiting van de staat te produceren fmet de toevoeging dat het ook een overzicht van de manier waarop het element is gemaakt op te nemen. Ie Ik wil een gzodanig dat ?- g(X,Y,Z).dit zal produceren:

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

Ik introduceren een extra aaneenschakeling predikaat:

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

En dan is mijn poging tot een oplossing zou zijn:

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

Terwijl de correcte kopieën gemaakt, aan het einde een extra false.afgedrukt:

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

Overwegende dat een eenvoudige definitie als volgt uit:

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

produceert

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

zonder de 'valse'.

Betekent dit dat mijn programma heeft een fout? Zo ja, wat is het?

De vraag is gesteld op 07/11/2018 om 23:41
bron van user
In andere talen...                            

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