Hello, Daniel Thank you for your explanation. It makes things easier to understand.
Cheers Alberto On Fri, Aug 10, 2012 at 8:08 AM, Daniel Diaz <[email protected]> wrote: > Hi Alberto, > > when you press ; (semicolon) you ask the top-level to look for another > solution. Maybe such a solution exists (it is then computed and displayed by > the top-level) or maybe not (in that case the top-level informs the user > about the failure). GNU Prolog tries to avoid to propose a ; to the user if > it knows there is no remaining solution. This behavior as also been followed > by SWI. Both systems detects there is no more solution depending on its > internal state (in fact it checks if there remains at least one choice-point > in its choice stack). For this GNU Prolog uses a clause indexing mechanism > based on the first argument. For this reason it can detect that f(a,X) has > only 2 solution (and does not propose a ;) while it cannot for f(X,b). Anyway > this is a "plus", the answer is not wrong. > > SWI has adopted the same principle and also avoids to propose a ; if it knows > there is no more solution. Simply its internal state is not the same as > gprolog thus both systems do not detect the same situations. > > ?- sub_atom(abc,X,Y,Z,c). > X = 2, > Y = 1, > Z = 0 ; > false. > > You can see that SWI also answers 'false'. > > While gprolog detects there is no more solution and does not propose a ; > > | ?- sub_atom(abc,X,Y,Z,c). > > X = 2 > Y = 1 > Z = 0 > > yes > > > Daniel > > > Le 7 août 2012 à 16:10, Alberto Simões a écrit : > >> Hello >> >> I am sorry if this is a trivial issue, that is explained somewhere. If >> so, please point me in that direction. >> Nevertheless, when doing some experiments with SWI Prolog and GNU >> Prolog, I found out some different behavior on some simple things: >> >> This is my SWI Prolog run: >> >> ?- [user]. >> |: f(a,b). >> |: f(c,d). >> |: f(a,d). >> |: % user://1 compiled 0.00 sec, 5 clauses >> true. >> >> ?- f(X,b). >> X = a. >> >> ?- f(a,X). >> X = b ; >> X = d. >> >> ?- f(X,d). >> X = c ; >> X = a. >> >> In fact, SWI Prolog never says true/false/yes/no. It just show the >> possible results. >> >> In GNU Prolog I get this: >> >> | ?- [user]. >> compiling user for byte code... >> f(a,b). >> f(c,d). >> f(a,d). >> >> user compiled, 4 lines read - 331 bytes written, 9192 ms >> >> yes >> | ?- f(X,b). >> >> X = a ? ; >> >> no >> | ?- f(a,X). >> >> X = b ? ; >> >> X = d >> >> yes >> | ?- f(X,d). >> >> X = c ? ; >> >> X = a >> >> (1 ms) yes >> >> Although I can understand the 'yes' answer, I can't get why in the >> first iteration GNU Prolog stopped and gave me the chance to ask for >> more solutions (while in the next two it didn't). And, why did it say >> "no" (ok, it said no because it didn't find any other solution, but >> then, why did it try to get more solutions in that case?) >> >> Thank you >> Kindest regards, >> Alberto >> >> -- >> Alberto Simões >> >> _______________________________________________ >> Users-prolog mailing list >> [email protected] >> https://lists.gnu.org/mailman/listinfo/users-prolog >> >> -- >> Ce message a ete verifie par MailScanner >> pour des virus ou des polluriels et rien de >> suspect n'a ete trouve. >> > > > -- > Ce message a ete verifie par MailScanner > pour des virus ou des polluriels et rien de > suspect n'a ete trouve. > -- Alberto Simões _______________________________________________ Users-prolog mailing list [email protected] https://lists.gnu.org/mailman/listinfo/users-prolog
