Zusätzliche ‚false‘ am Ende der Abfrage

stimmen
0

Im Grunde frage ich mich , warum eine meiner Definitionen für ein neues Prädikat gErgebnisse in meiner Anfrage whith einen ‚false‘ enden, während die andere Definition gerade nach hinten springt ‚-‘.

Bei einer Datenbank wie folgt aus:

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

Ich mag ein neues Prädikat erzeugen , die von einer Art von transitiver Hülle stellt fmit dem Zusatz , dass es auch eine Liste , wie das Element erstellt wurde umfassen soll. Dh ich möchte ein , gso dass ?- g(X,Y,Z).diese produzieren:

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

Ich stelle eine Hilfsverknüpfungsprädikat:

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

Und dann in einer Lösung meines Versuch wäre:

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

Während die korrekte Ausgabe erzeugt wird, am Ende eine zusätzliche false.gedruckt wird :

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

Während eine einfache Definition wie folgt:

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

produziert

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

ohne die ‚falsch‘.

Bedeutet dies, mein Programm einen Fehler hat? Wenn ja, was ist es?

Veröffentlicht am 07/11/2018 um 23:41
quelle vom benutzer
In anderen Sprachen...                            

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