Επιπλέον «ψευδή» στο τέλος του ερωτήματος

ψήφοι
0

Βασικά αναρωτιέμαι γιατί ένας από τους ορισμούς μου για μια νέα κατηγόρημα gαποτελέσματα στο ερώτημα μου τελειώνει υπνοδωματίων μια «ψεύτικη», ενώ ο άλλος ορισμός άλματα κατ 'ευθείαν πίσω στο «-;».

Λαμβάνοντας υπόψη μια βάση δεδομένων όπως αυτό:

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

Θέλω να παράγει ένα νέο κατηγόρημα που αντιπροσωπεύει ένα είδος κλείσιμο μεταβατική της fμε την προσθήκη ότι θα πρέπει επίσης να περιλαμβάνει μια λίστα για το πώς δημιουργήθηκε το στοιχείο. Δηλαδή θέλω ένα gτέτοιο που ?- g(X,Y,Z).θα παράγει το εξής:

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

Θα εισαγάγει ένα βοηθητικό κατηγόρημα αλληλουχία:

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

Και τότε η προσπάθειά μου σε μια λύση θα ήταν:

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

Ενώ η σωστή έξοδος παράγεται, στο τέλος μια πρόσθετη false.εκτυπώνεται:

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

Ενώ ένα απλό ορισμό όπως αυτό:

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

παράγει

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

χωρίς την «ψεύτικη».

Μήπως αυτό σημαίνει ότι το πρόγραμμα μου έχει σφάλμα; Αν ναι, τι είναι αυτό;

Δημοσιεύθηκε 07/11/2018 στις 23:41
πηγή χρήστη
Σε άλλες γλώσσες...                            

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