Re: [eclipse-clp-users] Simple problem - strange effect

From: Thorsten Winterer <thorsten_winterer_at_...126...>
Date: Thu, 22 Apr 2010 15:48:24 +0200
Am 22.04.2010 15:19, schrieb Philipp Marcus:
> Hi,
>
> given the following simple program:
>
>     :-lib(fd).
>     :-lib(propia).
>
>     con1(1,1,0).
>     con1(1,2,0).
>     con1(1,3,0).
>
>     cons(X,Y,B) :-
>         con1(X,Y,B) infers most.
>
>     execute(X) :-
>         X#::[1,2,3],    cons(1,X)    #\/     X#=1.
>
>
> I'd expect that the domain of X is reduced to the value 1 as the first
> term cons(1,X)  can never be true. But i only get the answer
>
>     ?- execute(X).
>     No (0.00s cpu)
>
> I am wondering as (false \/ X=1 ) should imply that X has to be 1 to
> be true.

The problem is that your are using fd instead of ic. fd's #\/ only works
with arithmetic constraints (see the documentation), whereas ic's 'or'
works with reified constraints:

    :-lib(ic).
    :-lib(propia).

    con1(1,1,0).
    con1(1,2,0).
    con1(1,3,0).

    cons(X,Y,B) :-
        con1(X,Y,B) infers most.

    execute(X) :-
        X#::[1,2,3],    cons(1,X)    or     X#=1.


?- execute(X).
X = 1
Yes (0.00s cpu)


Cheers,
Thorsten




>
> Thanks in advance and best regards,
> Philipp
>
>
>
> ------------------------------------------------------------------------------
>   
>
>
> _______________________________________________
> ECLiPSe-CLP-Users mailing list
> ECLiPSe-CLP-Users_at_lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/eclipse-clp-users
>   
Received on Thu Apr 22 2010 - 13:49:10 CEST

This archive was generated by hypermail 2.3.0 : Tue Apr 16 2024 - 09:13:20 CEST