Dodatečné ‚false‘ na konci dotazu

hlasů
0

V podstatě jsem přemýšlel, proč jeden z mých definic pro nového přívlastkových gvýsledky v mém dotazu končících whith a ‚false‘, zatímco druhá definice skočí rovnou do ‚-‘.

Vzhledem k tomu, databáze, jako je tento:

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

Chci vyrábět nový predikát, který představuje určitý druh uzávěru tranzitivní části fs přídavkem, který by měl rovněž zahrnovat přehled o tom, jak byl vytvořen element. Tj Chci gtaková, že ?- g(X,Y,Z).bude produkovat toto:

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

Představuji pomocné zřetězení predikát:

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

A pak se můj pokus o řešení bude vypadat následovně:

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

Zatímco správný výstup je produkován na konci další false.vytištěn:

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

Zatímco jednoduché definici, jako je tento:

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

produkuje

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

bez ‚false‘.

Znamená to, že můj program má chybu? Pokud ano, co je to?

Položena 07/11/2018 v 23:41
zdroj uživatelem
V jiných jazycích...                            

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