users-prolog
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Understanding GNU vs SWI differences


From: Alberto Simões
Subject: Re: Understanding GNU vs SWI differences
Date: Fri, 10 Aug 2012 10:21:35 +0100

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 <address@hidden> 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
>> address@hidden
>> 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]