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 : Wed Sep 25 2024 - 15:13:20 CEST