Dodatkowe „false” na końcu zapytania

głosy
0

W zasadzie zastanawiam się, dlaczego jeden z moich definicji dla nowego bazowych gwyników w moim zapytaniu kończących pokojowe a „false”, natomiast druga definicja skacze prosto do „-”.

Biorąc pod uwagę bazę danych tak:

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

Chcę produkować nowe orzeczenie co stanowi pewnego rodzaju domknięcie przechodnie z fdodatkiem, że powinien on również zawierać wykaz jaki element został utworzony. Tj chcę gtaki sposób, że ?- g(X,Y,Z).będzie produkować w ten sposób:

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

Wprowadzę pomocniczy konkatenacji orzeczenie:

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

A potem moja próba rozwiązania byłoby:

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

Podczas gdy prawidłowa wyjściowy jest produkowany w końcu dodatkowy false.drukowany jest:

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

Natomiast prostej definicji takich jak to:

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

produkuje

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

bez „false”.

Czy to znaczy, mój program ma błąd? Jeśli tak, to co to jest?

Utwórz 07/11/2018 o 23:41
źródło użytkownik
W innych językach...                            

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