További „hamis” végén lekérdezés

szavazat
0

Alapvetően kíváncsi vagyok, hogy miért az egyik meghatározások új állítmány geredmények az én lekérdezés végződő látnia „hamis”, míg a másik definíció ugrik egyenesen vissza „? -”.

Mivel az adatbázis, mint ez:

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

Azt akarom, hogy egy új, állítmány amely valamilyen tranzitív lezárása fazzal a kiegészítéssel, hogy azt is tartalmaz egy listát, hogy az elem jött létre. Azaz Szeretnék egy golyan, hogy ?- g(X,Y,Z).fog ez:

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

Bemutatom egy kisegítő összefűzés állítmány:

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

Aztán a kísérlet egy megoldás lenne:

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

Míg a megfelelő kimenetet állítunk elő, a végén egy további false.van nyomtatva:

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

Míg egy egyszerű definíció, mint ez:

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

termel

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

anélkül, hogy a „hamis”.

Ez azt jelenti, a programot egy hibát? Ha igen, mi az?

A kérdést 07/11/2018 23:41
a forrás felhasználó
Más nyelveken...                            

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