Merge branch 'master' of git@git.dcc.fc.up.pt:yap-6.3

This commit is contained in:
Fabrizio Riguzzi 2013-09-17 13:04:44 +02:00
commit b9d4868e37
30 changed files with 2582 additions and 811 deletions

View File

@ -1155,6 +1155,14 @@ Yap_InitThread(int new_id)
if (!(new_s = (struct worker_local *)calloc(sizeof(struct worker_local), 1)))
return FALSE;
Yap_local[new_id] = new_s;
if (!((REGSTORE *)pthread_getspecific(Yap_yaamregs_key))) {
REGSTORE *rs = (REGSTORE *)calloc(sizeof(REGSTORE),1);
pthread_setspecific(Yap_yaamregs_key, (const void *)rs);
REMOTE_ThreadHandle(new_id).default_yaam_regs = rs;
REMOTE_ThreadHandle(new_id).current_yaam_regs = REMOTE_ThreadHandle(new_id).default_yaam_regs;
rs->worker_id_ = new_id;
rs->worker_local_ = REMOTE(new_id);
}
}
InitWorker(new_id);
return TRUE;

View File

@ -69,8 +69,8 @@ typedef struct jmp_buff_struct {
} JMPBUFF;
static void GNextToken( CACHE_TYPE1 );
static void checkfor(Term, JMPBUFF * CACHE_TYPE);
static Term ParseArgs(Atom, Term, JMPBUFF *, Term CACHE_TYPE);
static void checkfor(wchar_t, JMPBUFF * CACHE_TYPE);
static Term ParseArgs(Atom, wchar_t, JMPBUFF *, Term CACHE_TYPE);
static Term ParseList(JMPBUFF * CACHE_TYPE);
static Term ParseTerm(int, JMPBUFF * CACHE_TYPE);
@ -315,16 +315,16 @@ GNextToken( USES_REGS1 )
}
inline static void
checkfor(Term c, JMPBUFF *FailBuff USES_REGS)
checkfor(wchar_t c, JMPBUFF *FailBuff USES_REGS)
{
if (LOCAL_tokptr->Tok != Ord(Ponctuation_tok)
|| LOCAL_tokptr->TokInfo != c)
|| LOCAL_tokptr->TokInfo != (Term)c)
FAIL;
NextToken;
}
static Term
ParseArgs(Atom a, Term close, JMPBUFF *FailBuff, Term arg1 USES_REGS)
ParseArgs(Atom a, wchar_t close, JMPBUFF *FailBuff, Term arg1 USES_REGS)
{
int nargs = 0;
Term *p, t;
@ -405,6 +405,18 @@ ParseArgs(Atom a, Term close, JMPBUFF *FailBuff, Term arg1 USES_REGS)
return t;
}
static Term MakeAccessor( Term t, Functor f USES_REGS )
{
UInt arity = ArityOfFunctor(FunctorOfTerm(t)), i;
Term tf[2], tl= TermNil;
tf[1] = ArgOfTerm(1, t);
for (i = arity; i > 1; i--) {
tl = MkPairTerm(ArgOfTerm(i, t), tl);
}
tf[0] = tl;
return Yap_MkApplTerm( f, 2, tf );
}
static Term
ParseList(JMPBUFF *FailBuff USES_REGS)
@ -540,7 +552,7 @@ ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS)
}
if (LOCAL_tokptr->Tok == Ord(Ponctuation_tok)
&& Unsigned(LOCAL_tokptr->TokInfo) == 'l')
t = ParseArgs((Atom) t, (Term)')', FailBuff, 0L PASS_REGS);
t = ParseArgs((Atom) t, ')', FailBuff, 0L PASS_REGS);
else
t = MkAtomTerm((Atom)t);
break;
@ -606,7 +618,7 @@ ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS)
case 'l': /* non solo ( */
NextToken;
t = ParseTerm(1200, FailBuff PASS_REGS);
checkfor((Term) ')', FailBuff PASS_REGS);
checkfor(')', FailBuff PASS_REGS);
break;
case '[':
NextToken;
@ -617,7 +629,7 @@ ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS)
break;
}
t = ParseList(FailBuff PASS_REGS);
checkfor((Term) ']', FailBuff PASS_REGS);
checkfor(']', FailBuff PASS_REGS);
break;
case '{':
NextToken;
@ -634,7 +646,7 @@ ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS)
LOCAL_ErrorMessage = "Stack Overflow";
FAIL;
}
checkfor((Term) '}', FailBuff PASS_REGS);
checkfor('}', FailBuff PASS_REGS);
break;
default:
FAIL;
@ -734,19 +746,21 @@ ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS)
} else if (Unsigned(LOCAL_tokptr->TokInfo) == '(' &&
IsPosfixOp(AtomEmptyBrackets, &opprio, &oplprio PASS_REGS)
&& opprio <= prio && oplprio >= curprio) {
t = ParseArgs(AtomEmptyBrackets, (Term)')', FailBuff, t PASS_REGS);
t = ParseArgs(AtomEmptyBrackets, ')', FailBuff, t PASS_REGS);
curprio = opprio;
continue;
} else if (Unsigned(LOCAL_tokptr->TokInfo) == '[' &&
IsPosfixOp(AtomEmptySquareBrackets, &opprio, &oplprio PASS_REGS)
&& opprio <= prio && oplprio >= curprio) {
t = ParseArgs(AtomEmptySquareBrackets, (Term)']', FailBuff, t PASS_REGS);
t = ParseArgs(AtomEmptySquareBrackets, ']', FailBuff, t PASS_REGS);
t = MakeAccessor(t, FunctorEmptySquareBrackets PASS_REGS);
curprio = opprio;
continue;
} else if (Unsigned(LOCAL_tokptr->TokInfo) == '{' &&
IsPosfixOp(AtomEmptyCurlyBrackets, &opprio, &oplprio PASS_REGS)
&& opprio <= prio && oplprio >= curprio) {
t = ParseArgs(AtomEmptyCurlyBrackets, (Term)'}', FailBuff, t PASS_REGS);
t = ParseArgs(AtomEmptyCurlyBrackets, '}', FailBuff, t PASS_REGS);
t = MakeAccessor(t, FunctorEmptyCurlyBrackets PASS_REGS);
curprio = opprio;
continue;
}

View File

@ -1306,9 +1306,18 @@ Yap_tokenizer(IOSTREAM *inp_stream, int store_comments, Term *tposp)
och = ch;
ch = getchr(inp_stream);
t->TokInfo = och;
if (t->TokInfo == '(' && !solo_flag) {
t->TokInfo = 'l';
solo_flag = TRUE;
if (och == '(') {
while (chtype(ch) == BS) { ch = getchr(inp_stream); };
if (ch == ')') {
t->TokInfo = Unsigned(AtomEmptyBrackets);
t->Tok = Ord(kind = Name_tok);
ch = getchr(inp_stream);
solo_flag = FALSE;
break;
} else if (!solo_flag) {
t->TokInfo = 'l';
solo_flag = TRUE;
}
} else if (och == '[') {
while (chtype(ch) == BS) { ch = getchr(inp_stream); };
if (ch == ']') {

View File

@ -94,15 +94,24 @@ store_specs(int new_worker_id, UInt ssize, UInt tsize, UInt sysize, Term *tpgoal
REMOTE_ThreadHandle(new_worker_id).ssize = ssize;
REMOTE_ThreadHandle(new_worker_id).tsize = tsize;
REMOTE_ThreadHandle(new_worker_id).sysize = sysize;
REMOTE_c_input_stream(new_worker_id) = LOCAL_c_input_stream;
REMOTE_c_output_stream(new_worker_id) = LOCAL_c_output_stream;
REMOTE_c_error_stream(new_worker_id) = LOCAL_c_error_stream;
if ((REGSTORE *)pthread_getspecific(Yap_yaamregs_key)) {
REMOTE_c_input_stream(new_worker_id) = LOCAL_c_input_stream;
REMOTE_c_output_stream(new_worker_id) = LOCAL_c_output_stream;
REMOTE_c_error_stream(new_worker_id) = LOCAL_c_error_stream;
} else {
// thread is created by a thread that has never run Prolog
REMOTE_c_input_stream(new_worker_id) = REMOTE_c_input_stream(0);
REMOTE_c_output_stream(new_worker_id) = REMOTE_c_output_stream(0);
REMOTE_c_error_stream(new_worker_id) = REMOTE_c_error_stream(0);
}
pm = (ssize + tsize)*1024;
if (!(REMOTE_ThreadHandle(new_worker_id).stack_address = malloc(pm))) {
return FALSE;
}
REMOTE_ThreadHandle(new_worker_id).tgoal =
Yap_StoreTermInDB(Deref(*tpgoal),7);
Yap_StoreTermInDB(Deref(*tpgoal), 7);
REMOTE_ThreadHandle(new_worker_id).cmod =
CurrentModule;
tdetach = Deref(*tpdetach);

View File

@ -977,7 +977,16 @@ writeTerm(Term t, int p, int depth, int rinfixarg, struct write_globs *wglb, str
Yap_IsPosfixOp(atom, &op, &lp)) {
Term tleft = ArgOfTerm(1, t);
int bracket_left =
int bracket_left, offset;
if (Arity != 1) {
tleft = ArgOfTerm(1, t);
offset = 2;
} else {
tleft = ArgOfTerm(2, t);
offset = 1;
}
bracket_left =
!IsVarTerm(tleft) &&
IsAtomTerm(tleft) &&
Yap_IsOp(AtomOfTerm(tleft));
@ -988,7 +997,7 @@ writeTerm(Term t, int p, int depth, int rinfixarg, struct write_globs *wglb, str
if (bracket_left) {
wropen_bracket(wglb, TRUE);
}
writeTerm(from_pointer(RepAppl(t)+1, &nrwt, wglb), lp, depth + 1, rinfixarg, wglb, &nrwt);
writeTerm(from_pointer(RepAppl(t)+offset, &nrwt, wglb), lp, depth + 1, rinfixarg, wglb, &nrwt);
restore_from_write(&nrwt, wglb);
if (bracket_left) {
wrclose_bracket(wglb, TRUE);
@ -1002,20 +1011,7 @@ writeTerm(Term t, int p, int depth, int rinfixarg, struct write_globs *wglb, str
wrputc('{', wglb->stream);
}
lastw = separator;
for (op = 2; op <= Arity; ++op) {
if (op == wglb->MaxArgs) {
wrputc('.', wglb->stream);
wrputc('.', wglb->stream);
wrputc('.', wglb->stream);
break;
}
writeTerm(from_pointer(RepAppl(t)+op, &nrwt, wglb), 999, depth + 1, FALSE, wglb, &nrwt);
restore_from_write(&nrwt, wglb);
if (op != Arity) {
wrputc(',', wglb->stream);
lastw = separator;
}
}
write_list(ArgOfTerm(1,t), 0, depth, wglb, rwt);
if (atom == AtomEmptyBrackets) {
wrputc(')', wglb->stream);
} else if (atom == AtomEmptySquareBrackets) {

View File

@ -382,6 +382,8 @@
FunctorDot7 = Yap_MkFunctor(AtomDot,7);
FunctorDot8 = Yap_MkFunctor(AtomDot,8);
FunctorDot9 = Yap_MkFunctor(AtomDot,9);
FunctorEmptySquareBrackets = Yap_MkFunctor(AtomEmptySquareBrackets,2);
FunctorEmptyCurlyBrackets = Yap_MkFunctor(AtomEmptyCurlyBrackets,2);
FunctorEq = Yap_MkFunctor(AtomEq,2);
FunctorError = Yap_MkFunctor(AtomError,2);
FunctorEvaluationError = Yap_MkFunctor(AtomEvaluationError,1);

View File

@ -382,6 +382,8 @@
FunctorDot7 = FuncAdjust(FunctorDot7);
FunctorDot8 = FuncAdjust(FunctorDot8);
FunctorDot9 = FuncAdjust(FunctorDot9);
FunctorEmptySquareBrackets = FuncAdjust(FunctorEmptySquareBrackets);
FunctorEmptyCurlyBrackets = FuncAdjust(FunctorEmptyCurlyBrackets);
FunctorEq = FuncAdjust(FunctorEq);
FunctorError = FuncAdjust(FunctorError);
FunctorEvaluationError = FuncAdjust(FunctorEvaluationError);

View File

@ -762,6 +762,10 @@
#define FunctorDot8 Yap_heap_regs->FunctorDot8_
Functor FunctorDot9_;
#define FunctorDot9 Yap_heap_regs->FunctorDot9_
Functor FunctorEmptySquareBrackets_;
#define FunctorEmptySquareBrackets Yap_heap_regs->FunctorEmptySquareBrackets_
Functor FunctorEmptyCurlyBrackets_;
#define FunctorEmptyCurlyBrackets Yap_heap_regs->FunctorEmptyCurlyBrackets_
Functor FunctorEq_;
#define FunctorEq Yap_heap_regs->FunctorEq_
Functor FunctorError_;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -173,20 +173,20 @@
gecode_SOT_MINUS = YAP_MkAtomTerm(X);
YAP_AtomGetHold(X); }
YAP_UserCPredicate("gecode_constraint_unary_448", gecode_constraint_unary_448, 6);
YAP_UserCPredicate("gecode_constraint_unary_444", gecode_constraint_unary_444, 6);
YAP_UserCPredicate("gecode_constraint_nvalues_335", gecode_constraint_nvalues_335, 5);
YAP_UserCPredicate("gecode_constraint_nvalues_337", gecode_constraint_nvalues_337, 5);
YAP_UserCPredicate("gecode_constraint_nvalues_331", gecode_constraint_nvalues_331, 5);
YAP_UserCPredicate("gecode_constraint_nvalues_333", gecode_constraint_nvalues_333, 5);
YAP_UserCPredicate("gecode_constraint_max_292", gecode_constraint_max_292, 4);
YAP_UserCPredicate("gecode_constraint_max_290", gecode_constraint_max_290, 4);
YAP_UserCPredicate("gecode_constraint_max_291", gecode_constraint_max_291, 4);
YAP_UserCPredicate("gecode_constraint_max_295", gecode_constraint_max_295, 4);
YAP_UserCPredicate("gecode_constraint_unary_458", gecode_constraint_unary_458, 6);
YAP_UserCPredicate("gecode_constraint_unary_454", gecode_constraint_unary_454, 6);
YAP_UserCPredicate("gecode_constraint_nvalues_345", gecode_constraint_nvalues_345, 5);
YAP_UserCPredicate("gecode_constraint_nvalues_347", gecode_constraint_nvalues_347, 5);
YAP_UserCPredicate("gecode_constraint_nvalues_341", gecode_constraint_nvalues_341, 5);
YAP_UserCPredicate("gecode_constraint_nvalues_343", gecode_constraint_nvalues_343, 5);
YAP_UserCPredicate("gecode_constraint_max_302", gecode_constraint_max_302, 4);
YAP_UserCPredicate("gecode_constraint_max_300", gecode_constraint_max_300, 4);
YAP_UserCPredicate("gecode_constraint_max_301", gecode_constraint_max_301, 4);
YAP_UserCPredicate("gecode_constraint_max_305", gecode_constraint_max_305, 4);
YAP_UserCPredicate("gecode_constraint_dom_200", gecode_constraint_dom_200, 6);
YAP_UserCPredicate("gecode_constraint_dom_209", gecode_constraint_dom_209, 6);
YAP_UserCPredicate("gecode_constraint_convex_91", gecode_constraint_convex_91, 3);
YAP_UserCPredicate("gecode_constraint_nooverlap_319", gecode_constraint_nooverlap_319, 5);
YAP_UserCPredicate("gecode_constraint_nooverlap_329", gecode_constraint_nooverlap_329, 5);
YAP_UserCPredicate("gecode_constraint_assign_15", gecode_constraint_assign_15, 3);
YAP_UserCPredicate("gecode_constraint_assign_6", gecode_constraint_assign_6, 3);
YAP_UserCPredicate("gecode_constraint_assign_3", gecode_constraint_assign_3, 3);
@ -204,11 +204,11 @@ YAP_UserCPredicate("gecode_constraint_element_227", gecode_constraint_element_22
YAP_UserCPredicate("gecode_constraint_element_230", gecode_constraint_element_230, 4);
YAP_UserCPredicate("gecode_constraint_element_236", gecode_constraint_element_236, 4);
YAP_UserCPredicate("gecode_constraint_element_228", gecode_constraint_element_228, 4);
YAP_UserCPredicate("gecode_constraint_sequence_427", gecode_constraint_sequence_427, 2);
YAP_UserCPredicate("gecode_constraint_notMax_325", gecode_constraint_notMax_325, 3);
YAP_UserCPredicate("gecode_constraint_ite_246", gecode_constraint_ite_246, 5);
YAP_UserCPredicate("gecode_constraint_unary_441", gecode_constraint_unary_441, 3);
YAP_UserCPredicate("gecode_constraint_nroot_329", gecode_constraint_nroot_329, 5);
YAP_UserCPredicate("gecode_constraint_sequence_437", gecode_constraint_sequence_437, 2);
YAP_UserCPredicate("gecode_constraint_notMax_335", gecode_constraint_notMax_335, 3);
YAP_UserCPredicate("gecode_constraint_ite_256", gecode_constraint_ite_256, 5);
YAP_UserCPredicate("gecode_constraint_unary_451", gecode_constraint_unary_451, 3);
YAP_UserCPredicate("gecode_constraint_nroot_339", gecode_constraint_nroot_339, 5);
YAP_UserCPredicate("gecode_constraint_circuit_85", gecode_constraint_circuit_85, 4);
YAP_UserCPredicate("gecode_constraint_circuit_76", gecode_constraint_circuit_76, 4);
YAP_UserCPredicate("gecode_constraint_dom_199", gecode_constraint_dom_199, 5);
@ -224,74 +224,76 @@ YAP_UserCPredicate("gecode_constraint_dom_206", gecode_constraint_dom_206, 5);
YAP_UserCPredicate("gecode_constraint_channel_66", gecode_constraint_channel_66, 4);
YAP_UserCPredicate("gecode_constraint_channel_62", gecode_constraint_channel_62, 4);
YAP_UserCPredicate("gecode_constraint_channel_60", gecode_constraint_channel_60, 4);
YAP_UserCPredicate("gecode_constraint_nooverlap_321", gecode_constraint_nooverlap_321, 8);
YAP_UserCPredicate("gecode_constraint_nooverlap_324", gecode_constraint_nooverlap_324, 8);
YAP_UserCPredicate("gecode_constraint_nooverlap_331", gecode_constraint_nooverlap_331, 8);
YAP_UserCPredicate("gecode_constraint_nooverlap_334", gecode_constraint_nooverlap_334, 8);
YAP_UserCPredicate("gecode_constraint_element_222", gecode_constraint_element_222, 7);
YAP_UserCPredicate("gecode_constraint_element_216", gecode_constraint_element_216, 7);
YAP_UserCPredicate("gecode_constraint_element_218", gecode_constraint_element_218, 7);
YAP_UserCPredicate("gecode_constraint_element_226", gecode_constraint_element_226, 7);
YAP_UserCPredicate("gecode_constraint_element_234", gecode_constraint_element_234, 7);
YAP_UserCPredicate("gecode_constraint_element_232", gecode_constraint_element_232, 7);
YAP_UserCPredicate("gecode_constraint_max_288", gecode_constraint_max_288, 3);
YAP_UserCPredicate("gecode_constraint_max_289", gecode_constraint_max_289, 3);
YAP_UserCPredicate("gecode_constraint_max_294", gecode_constraint_max_294, 3);
YAP_UserCPredicate("gecode_constraint_unshare_453", gecode_constraint_unshare_453, 2);
YAP_UserCPredicate("gecode_constraint_unshare_451", gecode_constraint_unshare_451, 2);
YAP_UserCPredicate("gecode_constraint_path_348", gecode_constraint_path_348, 5);
YAP_UserCPredicate("gecode_constraint_path_347", gecode_constraint_path_347, 5);
YAP_UserCPredicate("gecode_constraint_max_298", gecode_constraint_max_298, 3);
YAP_UserCPredicate("gecode_constraint_max_299", gecode_constraint_max_299, 3);
YAP_UserCPredicate("gecode_constraint_max_304", gecode_constraint_max_304, 3);
YAP_UserCPredicate("gecode_constraint_unshare_463", gecode_constraint_unshare_463, 2);
YAP_UserCPredicate("gecode_constraint_unshare_461", gecode_constraint_unshare_461, 2);
YAP_UserCPredicate("gecode_constraint_path_358", gecode_constraint_path_358, 5);
YAP_UserCPredicate("gecode_constraint_path_357", gecode_constraint_path_357, 5);
YAP_UserCPredicate("gecode_constraint_branch_34", gecode_constraint_branch_34, 7);
YAP_UserCPredicate("gecode_constraint_branch_28", gecode_constraint_branch_28, 7);
YAP_UserCPredicate("gecode_constraint_branch_40", gecode_constraint_branch_40, 7);
YAP_UserCPredicate("gecode_constraint_mult_315", gecode_constraint_mult_315, 4);
YAP_UserCPredicate("gecode_constraint_mult_314", gecode_constraint_mult_314, 4);
YAP_UserCPredicate("gecode_constraint_mult_325", gecode_constraint_mult_325, 4);
YAP_UserCPredicate("gecode_constraint_mult_324", gecode_constraint_mult_324, 4);
YAP_UserCPredicate("gecode_constraint_clause_89", gecode_constraint_clause_89, 6);
YAP_UserCPredicate("gecode_constraint_clause_87", gecode_constraint_clause_87, 6);
YAP_UserCPredicate("gecode_constraint_precede_356", gecode_constraint_precede_356, 5);
YAP_UserCPredicate("gecode_constraint_precede_366", gecode_constraint_precede_366, 5);
YAP_UserCPredicate("gecode_constraint_distinct_160", gecode_constraint_distinct_160, 2);
YAP_UserCPredicate("gecode_constraint_member_302", gecode_constraint_member_302, 4);
YAP_UserCPredicate("gecode_constraint_member_301", gecode_constraint_member_301, 4);
YAP_UserCPredicate("gecode_constraint_member_298", gecode_constraint_member_298, 4);
YAP_UserCPredicate("gecode_constraint_member_297", gecode_constraint_member_297, 4);
YAP_UserCPredicate("gecode_constraint_mod_313", gecode_constraint_mod_313, 5);
YAP_UserCPredicate("gecode_constraint_member_312", gecode_constraint_member_312, 4);
YAP_UserCPredicate("gecode_constraint_member_311", gecode_constraint_member_311, 4);
YAP_UserCPredicate("gecode_constraint_member_308", gecode_constraint_member_308, 4);
YAP_UserCPredicate("gecode_constraint_member_307", gecode_constraint_member_307, 4);
YAP_UserCPredicate("gecode_constraint_mod_323", gecode_constraint_mod_323, 5);
YAP_UserCPredicate("gecode_constraint_cardinality_57", gecode_constraint_cardinality_57, 3);
YAP_UserCPredicate("gecode_constraint_atmostOne_53", gecode_constraint_atmostOne_53, 3);
YAP_UserCPredicate("gecode_constraint_channelSorted_73", gecode_constraint_channelSorted_73, 3);
YAP_UserCPredicate("gecode_constraint_extensional_253", gecode_constraint_extensional_253, 5);
YAP_UserCPredicate("gecode_constraint_extensional_248", gecode_constraint_extensional_248, 5);
YAP_UserCPredicate("gecode_constraint_linear_272", gecode_constraint_linear_272, 4);
YAP_UserCPredicate("gecode_constraint_linear_270", gecode_constraint_linear_270, 4);
YAP_UserCPredicate("gecode_constraint_linear_258", gecode_constraint_linear_258, 4);
YAP_UserCPredicate("gecode_constraint_linear_262", gecode_constraint_linear_262, 4);
YAP_UserCPredicate("gecode_constraint_linear_260", gecode_constraint_linear_260, 4);
YAP_UserCPredicate("gecode_constraint_linear_248", gecode_constraint_linear_248, 4);
YAP_UserCPredicate("gecode_constraint_linear_252", gecode_constraint_linear_252, 4);
YAP_UserCPredicate("gecode_constraint_linear_280", gecode_constraint_linear_280, 4);
YAP_UserCPredicate("gecode_constraint_linear_284", gecode_constraint_linear_284, 4);
YAP_UserCPredicate("gecode_constraint_linear_290", gecode_constraint_linear_290, 4);
YAP_UserCPredicate("gecode_constraint_linear_294", gecode_constraint_linear_294, 4);
YAP_UserCPredicate("gecode_constraint_circuit_82", gecode_constraint_circuit_82, 2);
YAP_UserCPredicate("gecode_constraint_rel_396", gecode_constraint_rel_396, 5);
YAP_UserCPredicate("gecode_constraint_rel_398", gecode_constraint_rel_398, 5);
YAP_UserCPredicate("gecode_constraint_rel_412", gecode_constraint_rel_412, 5);
YAP_UserCPredicate("gecode_constraint_rel_410", gecode_constraint_rel_410, 5);
YAP_UserCPredicate("gecode_constraint_rel_382", gecode_constraint_rel_382, 5);
YAP_UserCPredicate("gecode_constraint_rel_378", gecode_constraint_rel_378, 5);
YAP_UserCPredicate("gecode_constraint_rel_376", gecode_constraint_rel_376, 5);
YAP_UserCPredicate("gecode_constraint_rel_373", gecode_constraint_rel_373, 5);
YAP_UserCPredicate("gecode_constraint_rel_372", gecode_constraint_rel_372, 5);
YAP_UserCPredicate("gecode_constraint_rel_369", gecode_constraint_rel_369, 5);
YAP_UserCPredicate("gecode_constraint_rel_368", gecode_constraint_rel_368, 5);
YAP_UserCPredicate("gecode_constraint_rel_365", gecode_constraint_rel_365, 5);
YAP_UserCPredicate("gecode_constraint_rel_363", gecode_constraint_rel_363, 5);
YAP_UserCPredicate("gecode_constraint_rel_392", gecode_constraint_rel_392, 5);
YAP_UserCPredicate("gecode_constraint_rel_394", gecode_constraint_rel_394, 5);
YAP_UserCPredicate("gecode_constraint_rel_388", gecode_constraint_rel_388, 5);
YAP_UserCPredicate("gecode_constraint_rel_401", gecode_constraint_rel_401, 5);
YAP_UserCPredicate("gecode_constraint_rel_400", gecode_constraint_rel_400, 5);
YAP_UserCPredicate("gecode_constraint_rel_405", gecode_constraint_rel_405, 5);
YAP_UserCPredicate("gecode_constraint_rel_404", gecode_constraint_rel_404, 5);
YAP_UserCPredicate("gecode_constraint_rel_409", gecode_constraint_rel_409, 5);
YAP_UserCPredicate("gecode_constraint_rel_420", gecode_constraint_rel_420, 5);
YAP_UserCPredicate("gecode_constraint_rel_406", gecode_constraint_rel_406, 5);
YAP_UserCPredicate("gecode_constraint_rel_408", gecode_constraint_rel_408, 5);
YAP_UserCPredicate("gecode_constraint_rel_422", gecode_constraint_rel_422, 5);
YAP_UserCPredicate("gecode_constraint_rel_362", gecode_constraint_rel_362, 5);
YAP_UserCPredicate("gecode_constraint_rel_360", gecode_constraint_rel_360, 5);
YAP_UserCPredicate("gecode_constraint_min_308", gecode_constraint_min_308, 4);
YAP_UserCPredicate("gecode_constraint_min_306", gecode_constraint_min_306, 4);
YAP_UserCPredicate("gecode_constraint_min_307", gecode_constraint_min_307, 4);
YAP_UserCPredicate("gecode_constraint_min_311", gecode_constraint_min_311, 4);
YAP_UserCPredicate("gecode_constraint_rel_420", gecode_constraint_rel_420, 5);
YAP_UserCPredicate("gecode_constraint_rel_392", gecode_constraint_rel_392, 5);
YAP_UserCPredicate("gecode_constraint_rel_388", gecode_constraint_rel_388, 5);
YAP_UserCPredicate("gecode_constraint_rel_386", gecode_constraint_rel_386, 5);
YAP_UserCPredicate("gecode_constraint_rel_383", gecode_constraint_rel_383, 5);
YAP_UserCPredicate("gecode_constraint_rel_382", gecode_constraint_rel_382, 5);
YAP_UserCPredicate("gecode_constraint_rel_379", gecode_constraint_rel_379, 5);
YAP_UserCPredicate("gecode_constraint_rel_378", gecode_constraint_rel_378, 5);
YAP_UserCPredicate("gecode_constraint_rel_375", gecode_constraint_rel_375, 5);
YAP_UserCPredicate("gecode_constraint_rel_373", gecode_constraint_rel_373, 5);
YAP_UserCPredicate("gecode_constraint_rel_402", gecode_constraint_rel_402, 5);
YAP_UserCPredicate("gecode_constraint_rel_404", gecode_constraint_rel_404, 5);
YAP_UserCPredicate("gecode_constraint_rel_398", gecode_constraint_rel_398, 5);
YAP_UserCPredicate("gecode_constraint_rel_411", gecode_constraint_rel_411, 5);
YAP_UserCPredicate("gecode_constraint_rel_410", gecode_constraint_rel_410, 5);
YAP_UserCPredicate("gecode_constraint_rel_415", gecode_constraint_rel_415, 5);
YAP_UserCPredicate("gecode_constraint_rel_414", gecode_constraint_rel_414, 5);
YAP_UserCPredicate("gecode_constraint_rel_419", gecode_constraint_rel_419, 5);
YAP_UserCPredicate("gecode_constraint_rel_430", gecode_constraint_rel_430, 5);
YAP_UserCPredicate("gecode_constraint_rel_432", gecode_constraint_rel_432, 5);
YAP_UserCPredicate("gecode_constraint_rel_372", gecode_constraint_rel_372, 5);
YAP_UserCPredicate("gecode_constraint_rel_370", gecode_constraint_rel_370, 5);
YAP_UserCPredicate("gecode_constraint_min_318", gecode_constraint_min_318, 4);
YAP_UserCPredicate("gecode_constraint_min_316", gecode_constraint_min_316, 4);
YAP_UserCPredicate("gecode_constraint_min_317", gecode_constraint_min_317, 4);
YAP_UserCPredicate("gecode_constraint_min_321", gecode_constraint_min_321, 4);
YAP_UserCPredicate("gecode_constraint_cardinality_56", gecode_constraint_cardinality_56, 4);
YAP_UserCPredicate("gecode_constraint_cardinality_58", gecode_constraint_cardinality_58, 4);
YAP_UserCPredicate("gecode_constraint_count_109", gecode_constraint_count_109, 4);
@ -299,8 +301,8 @@ YAP_UserCPredicate("gecode_constraint_count_106", gecode_constraint_count_106, 4
YAP_UserCPredicate("gecode_constraint_count_100", gecode_constraint_count_100, 4);
YAP_UserCPredicate("gecode_constraint_count_99", gecode_constraint_count_99, 4);
YAP_UserCPredicate("gecode_constraint_count_96", gecode_constraint_count_96, 4);
YAP_UserCPredicate("gecode_constraint_sqrt_437", gecode_constraint_sqrt_437, 3);
YAP_UserCPredicate("gecode_constraint_sqrt_436", gecode_constraint_sqrt_436, 3);
YAP_UserCPredicate("gecode_constraint_sqrt_447", gecode_constraint_sqrt_447, 3);
YAP_UserCPredicate("gecode_constraint_sqrt_446", gecode_constraint_sqrt_446, 3);
YAP_UserCPredicate("gecode_constraint_cumulatives_157", gecode_constraint_cumulatives_157, 9);
YAP_UserCPredicate("gecode_constraint_cumulatives_155", gecode_constraint_cumulatives_155, 9);
YAP_UserCPredicate("gecode_constraint_cumulatives_153", gecode_constraint_cumulatives_153, 9);
@ -309,41 +311,41 @@ YAP_UserCPredicate("gecode_constraint_cumulatives_149", gecode_constraint_cumula
YAP_UserCPredicate("gecode_constraint_cumulatives_147", gecode_constraint_cumulatives_147, 9);
YAP_UserCPredicate("gecode_constraint_cumulatives_145", gecode_constraint_cumulatives_145, 9);
YAP_UserCPredicate("gecode_constraint_cumulatives_143", gecode_constraint_cumulatives_143, 9);
YAP_UserCPredicate("gecode_constraint_nvalues_334", gecode_constraint_nvalues_334, 4);
YAP_UserCPredicate("gecode_constraint_nvalues_336", gecode_constraint_nvalues_336, 4);
YAP_UserCPredicate("gecode_constraint_nvalues_330", gecode_constraint_nvalues_330, 4);
YAP_UserCPredicate("gecode_constraint_nvalues_332", gecode_constraint_nvalues_332, 4);
YAP_UserCPredicate("gecode_constraint_nvalues_344", gecode_constraint_nvalues_344, 4);
YAP_UserCPredicate("gecode_constraint_nvalues_346", gecode_constraint_nvalues_346, 4);
YAP_UserCPredicate("gecode_constraint_nvalues_340", gecode_constraint_nvalues_340, 4);
YAP_UserCPredicate("gecode_constraint_nvalues_342", gecode_constraint_nvalues_342, 4);
YAP_UserCPredicate("gecode_constraint_binpacking_54", gecode_constraint_binpacking_54, 4);
YAP_UserCPredicate("gecode_constraint_linear_275", gecode_constraint_linear_275, 7);
YAP_UserCPredicate("gecode_constraint_linear_279", gecode_constraint_linear_279, 7);
YAP_UserCPredicate("gecode_constraint_linear_267", gecode_constraint_linear_267, 7);
YAP_UserCPredicate("gecode_constraint_linear_271", gecode_constraint_linear_271, 7);
YAP_UserCPredicate("gecode_constraint_linear_285", gecode_constraint_linear_285, 7);
YAP_UserCPredicate("gecode_constraint_linear_289", gecode_constraint_linear_289, 7);
YAP_UserCPredicate("gecode_constraint_linear_277", gecode_constraint_linear_277, 7);
YAP_UserCPredicate("gecode_constraint_linear_281", gecode_constraint_linear_281, 7);
YAP_UserCPredicate("gecode_constraint_abs_52", gecode_constraint_abs_52, 4);
YAP_UserCPredicate("gecode_constraint_convex_90", gecode_constraint_convex_90, 2);
YAP_UserCPredicate("gecode_constraint_div_163", gecode_constraint_div_163, 4);
YAP_UserCPredicate("gecode_constraint_div_162", gecode_constraint_div_162, 4);
YAP_UserCPredicate("gecode_constraint_rel_402", gecode_constraint_rel_402, 6);
YAP_UserCPredicate("gecode_constraint_rel_406", gecode_constraint_rel_406, 6);
YAP_UserCPredicate("gecode_constraint_rel_385", gecode_constraint_rel_385, 6);
YAP_UserCPredicate("gecode_constraint_rel_386", gecode_constraint_rel_386, 6);
YAP_UserCPredicate("gecode_constraint_rel_374", gecode_constraint_rel_374, 6);
YAP_UserCPredicate("gecode_constraint_rel_370", gecode_constraint_rel_370, 6);
YAP_UserCPredicate("gecode_constraint_rel_366", gecode_constraint_rel_366, 6);
YAP_UserCPredicate("gecode_constraint_rel_364", gecode_constraint_rel_364, 6);
YAP_UserCPredicate("gecode_constraint_rel_415", gecode_constraint_rel_415, 6);
YAP_UserCPredicate("gecode_constraint_rel_412", gecode_constraint_rel_412, 6);
YAP_UserCPredicate("gecode_constraint_rel_416", gecode_constraint_rel_416, 6);
YAP_UserCPredicate("gecode_constraint_rel_417", gecode_constraint_rel_417, 6);
YAP_UserCPredicate("gecode_constraint_rel_418", gecode_constraint_rel_418, 6);
YAP_UserCPredicate("gecode_constraint_weights_455", gecode_constraint_weights_455, 5);
YAP_UserCPredicate("gecode_constraint_max_293", gecode_constraint_max_293, 5);
YAP_UserCPredicate("gecode_constraint_path_343", gecode_constraint_path_343, 9);
YAP_UserCPredicate("gecode_constraint_rel_395", gecode_constraint_rel_395, 6);
YAP_UserCPredicate("gecode_constraint_rel_396", gecode_constraint_rel_396, 6);
YAP_UserCPredicate("gecode_constraint_rel_384", gecode_constraint_rel_384, 6);
YAP_UserCPredicate("gecode_constraint_rel_380", gecode_constraint_rel_380, 6);
YAP_UserCPredicate("gecode_constraint_rel_376", gecode_constraint_rel_376, 6);
YAP_UserCPredicate("gecode_constraint_rel_374", gecode_constraint_rel_374, 6);
YAP_UserCPredicate("gecode_constraint_rel_425", gecode_constraint_rel_425, 6);
YAP_UserCPredicate("gecode_constraint_rel_426", gecode_constraint_rel_426, 6);
YAP_UserCPredicate("gecode_constraint_rel_427", gecode_constraint_rel_427, 6);
YAP_UserCPredicate("gecode_constraint_rel_428", gecode_constraint_rel_428, 6);
YAP_UserCPredicate("gecode_constraint_weights_465", gecode_constraint_weights_465, 5);
YAP_UserCPredicate("gecode_constraint_max_303", gecode_constraint_max_303, 5);
YAP_UserCPredicate("gecode_constraint_path_353", gecode_constraint_path_353, 9);
YAP_UserCPredicate("gecode_constraint_unary_459", gecode_constraint_unary_459, 4);
YAP_UserCPredicate("gecode_constraint_unary_455", gecode_constraint_unary_455, 4);
YAP_UserCPredicate("gecode_constraint_unary_449", gecode_constraint_unary_449, 4);
YAP_UserCPredicate("gecode_constraint_unary_445", gecode_constraint_unary_445, 4);
YAP_UserCPredicate("gecode_constraint_unary_439", gecode_constraint_unary_439, 4);
YAP_UserCPredicate("gecode_constraint_unary_442", gecode_constraint_unary_442, 4);
YAP_UserCPredicate("gecode_constraint_nroot_328", gecode_constraint_nroot_328, 4);
YAP_UserCPredicate("gecode_constraint_nroot_327", gecode_constraint_nroot_327, 4);
YAP_UserCPredicate("gecode_constraint_sorted_430", gecode_constraint_sorted_430, 5);
YAP_UserCPredicate("gecode_constraint_unary_452", gecode_constraint_unary_452, 4);
YAP_UserCPredicate("gecode_constraint_nroot_338", gecode_constraint_nroot_338, 4);
YAP_UserCPredicate("gecode_constraint_nroot_337", gecode_constraint_nroot_337, 4);
YAP_UserCPredicate("gecode_constraint_sorted_440", gecode_constraint_sorted_440, 5);
YAP_UserCPredicate("gecode_constraint_circuit_80", gecode_constraint_circuit_80, 5);
YAP_UserCPredicate("gecode_constraint_circuit_77", gecode_constraint_circuit_77, 5);
YAP_UserCPredicate("gecode_constraint_circuit_74", gecode_constraint_circuit_74, 5);
@ -374,9 +376,9 @@ YAP_UserCPredicate("gecode_constraint_assign_8", gecode_constraint_assign_8, 5);
YAP_UserCPredicate("gecode_constraint_assign_5", gecode_constraint_assign_5, 5);
YAP_UserCPredicate("gecode_constraint_assign_11", gecode_constraint_assign_11, 5);
YAP_UserCPredicate("gecode_constraint_assign_14", gecode_constraint_assign_14, 5);
YAP_UserCPredicate("gecode_constraint_rel_399", gecode_constraint_rel_399, 3);
YAP_UserCPredicate("gecode_constraint_rel_389", gecode_constraint_rel_389, 3);
YAP_UserCPredicate("gecode_constraint_rel_379", gecode_constraint_rel_379, 3);
YAP_UserCPredicate("gecode_constraint_path_346", gecode_constraint_path_346, 4);
YAP_UserCPredicate("gecode_constraint_path_356", gecode_constraint_path_356, 4);
YAP_UserCPredicate("gecode_constraint_branch_45", gecode_constraint_branch_45, 4);
YAP_UserCPredicate("gecode_constraint_branch_29", gecode_constraint_branch_29, 4);
YAP_UserCPredicate("gecode_constraint_branch_23", gecode_constraint_branch_23, 4);
@ -385,15 +387,15 @@ YAP_UserCPredicate("gecode_constraint_branch_35", gecode_constraint_branch_35, 4
YAP_UserCPredicate("gecode_constraint_branch_47", gecode_constraint_branch_47, 4);
YAP_UserCPredicate("gecode_constraint_branch_41", gecode_constraint_branch_41, 4);
YAP_UserCPredicate("gecode_constraint_branch_49", gecode_constraint_branch_49, 4);
YAP_UserCPredicate("gecode_constraint_mult_316", gecode_constraint_mult_316, 5);
YAP_UserCPredicate("gecode_constraint_mult_326", gecode_constraint_mult_326, 5);
YAP_UserCPredicate("gecode_constraint_circuit_81", gecode_constraint_circuit_81, 6);
YAP_UserCPredicate("gecode_constraint_circuit_78", gecode_constraint_circuit_78, 6);
YAP_UserCPredicate("gecode_constraint_circuit_75", gecode_constraint_circuit_75, 6);
YAP_UserCPredicate("gecode_constraint_clause_88", gecode_constraint_clause_88, 5);
YAP_UserCPredicate("gecode_constraint_clause_86", gecode_constraint_clause_86, 5);
YAP_UserCPredicate("gecode_constraint_precede_358", gecode_constraint_precede_358, 4);
YAP_UserCPredicate("gecode_constraint_precede_355", gecode_constraint_precede_355, 4);
YAP_UserCPredicate("gecode_constraint_precede_354", gecode_constraint_precede_354, 4);
YAP_UserCPredicate("gecode_constraint_precede_368", gecode_constraint_precede_368, 4);
YAP_UserCPredicate("gecode_constraint_precede_365", gecode_constraint_precede_365, 4);
YAP_UserCPredicate("gecode_constraint_precede_364", gecode_constraint_precede_364, 4);
YAP_UserCPredicate("gecode_constraint_channel_69", gecode_constraint_channel_69, 6);
YAP_UserCPredicate("gecode_constraint_cumulative_126", gecode_constraint_cumulative_126, 7);
YAP_UserCPredicate("gecode_constraint_cumulative_129", gecode_constraint_cumulative_129, 7);
@ -407,18 +409,22 @@ YAP_UserCPredicate("gecode_constraint_cumulative_137", gecode_constraint_cumulat
YAP_UserCPredicate("gecode_constraint_cumulative_131", gecode_constraint_cumulative_131, 7);
YAP_UserCPredicate("gecode_constraint_distinct_161", gecode_constraint_distinct_161, 3);
YAP_UserCPredicate("gecode_constraint_distinct_158", gecode_constraint_distinct_158, 3);
YAP_UserCPredicate("gecode_constraint_member_303", gecode_constraint_member_303, 5);
YAP_UserCPredicate("gecode_constraint_member_299", gecode_constraint_member_299, 5);
YAP_UserCPredicate("gecode_constraint_mod_312", gecode_constraint_mod_312, 4);
YAP_UserCPredicate("gecode_constraint_sqr_434", gecode_constraint_sqr_434, 3);
YAP_UserCPredicate("gecode_constraint_sqr_433", gecode_constraint_sqr_433, 3);
YAP_UserCPredicate("gecode_constraint_sequence_426", gecode_constraint_sequence_426, 7);
YAP_UserCPredicate("gecode_constraint_sequence_424", gecode_constraint_sequence_424, 7);
YAP_UserCPredicate("gecode_constraint_path_344", gecode_constraint_path_344, 7);
YAP_UserCPredicate("gecode_constraint_path_341", gecode_constraint_path_341, 7);
YAP_UserCPredicate("gecode_constraint_path_338", gecode_constraint_path_338, 7);
YAP_UserCPredicate("gecode_constraint_member_313", gecode_constraint_member_313, 5);
YAP_UserCPredicate("gecode_constraint_member_309", gecode_constraint_member_309, 5);
YAP_UserCPredicate("gecode_constraint_mod_322", gecode_constraint_mod_322, 4);
YAP_UserCPredicate("gecode_constraint_sqr_444", gecode_constraint_sqr_444, 3);
YAP_UserCPredicate("gecode_constraint_sqr_443", gecode_constraint_sqr_443, 3);
YAP_UserCPredicate("gecode_constraint_sequence_436", gecode_constraint_sequence_436, 7);
YAP_UserCPredicate("gecode_constraint_sequence_434", gecode_constraint_sequence_434, 7);
YAP_UserCPredicate("gecode_constraint_path_354", gecode_constraint_path_354, 7);
YAP_UserCPredicate("gecode_constraint_path_351", gecode_constraint_path_351, 7);
YAP_UserCPredicate("gecode_constraint_path_348", gecode_constraint_path_348, 7);
YAP_UserCPredicate("gecode_constraint_divmod_166", gecode_constraint_divmod_166, 6);
YAP_UserCPredicate("gecode_constraint_sorted_431", gecode_constraint_sorted_431, 3);
YAP_UserCPredicate("gecode_constraint_sorted_441", gecode_constraint_sorted_441, 3);
YAP_UserCPredicate("gecode_constraint_extensional_252", gecode_constraint_extensional_252, 4);
YAP_UserCPredicate("gecode_constraint_extensional_255", gecode_constraint_extensional_255, 4);
YAP_UserCPredicate("gecode_constraint_extensional_247", gecode_constraint_extensional_247, 4);
YAP_UserCPredicate("gecode_constraint_extensional_250", gecode_constraint_extensional_250, 4);
YAP_UserCPredicate("gecode_constraint_circuit_84", gecode_constraint_circuit_84, 3);
YAP_UserCPredicate("gecode_constraint_circuit_83", gecode_constraint_circuit_83, 3);
YAP_UserCPredicate("gecode_constraint_channel_71", gecode_constraint_channel_71, 3);
@ -449,34 +455,38 @@ YAP_UserCPredicate("gecode_constraint_cumulatives_146", gecode_constraint_cumula
YAP_UserCPredicate("gecode_constraint_cumulatives_144", gecode_constraint_cumulatives_144, 8);
YAP_UserCPredicate("gecode_constraint_cumulatives_142", gecode_constraint_cumulatives_142, 8);
YAP_UserCPredicate("gecode_constraint_binpacking_55", gecode_constraint_binpacking_55, 5);
YAP_UserCPredicate("gecode_constraint_linear_283", gecode_constraint_linear_283, 6);
YAP_UserCPredicate("gecode_constraint_linear_287", gecode_constraint_linear_287, 6);
YAP_UserCPredicate("gecode_constraint_linear_251", gecode_constraint_linear_251, 6);
YAP_UserCPredicate("gecode_constraint_linear_255", gecode_constraint_linear_255, 6);
YAP_UserCPredicate("gecode_constraint_linear_259", gecode_constraint_linear_259, 6);
YAP_UserCPredicate("gecode_constraint_linear_257", gecode_constraint_linear_257, 6);
YAP_UserCPredicate("gecode_constraint_linear_274", gecode_constraint_linear_274, 6);
YAP_UserCPredicate("gecode_constraint_linear_273", gecode_constraint_linear_273, 6);
YAP_UserCPredicate("gecode_constraint_linear_278", gecode_constraint_linear_278, 6);
YAP_UserCPredicate("gecode_constraint_linear_277", gecode_constraint_linear_277, 6);
YAP_UserCPredicate("gecode_constraint_linear_266", gecode_constraint_linear_266, 6);
YAP_UserCPredicate("gecode_constraint_extensional_251", gecode_constraint_extensional_251, 3);
YAP_UserCPredicate("gecode_constraint_extensional_254", gecode_constraint_extensional_254, 3);
YAP_UserCPredicate("gecode_constraint_extensional_246", gecode_constraint_extensional_246, 3);
YAP_UserCPredicate("gecode_constraint_extensional_249", gecode_constraint_extensional_249, 3);
YAP_UserCPredicate("gecode_constraint_linear_293", gecode_constraint_linear_293, 6);
YAP_UserCPredicate("gecode_constraint_linear_297", gecode_constraint_linear_297, 6);
YAP_UserCPredicate("gecode_constraint_linear_261", gecode_constraint_linear_261, 6);
YAP_UserCPredicate("gecode_constraint_linear_265", gecode_constraint_linear_265, 6);
YAP_UserCPredicate("gecode_constraint_linear_270", gecode_constraint_linear_270, 6);
YAP_UserCPredicate("gecode_constraint_linear_269", gecode_constraint_linear_269, 6);
YAP_UserCPredicate("gecode_constraint_nooverlap_323", gecode_constraint_nooverlap_323, 7);
YAP_UserCPredicate("gecode_constraint_nooverlap_318", gecode_constraint_nooverlap_318, 7);
YAP_UserCPredicate("gecode_constraint_linear_267", gecode_constraint_linear_267, 6);
YAP_UserCPredicate("gecode_constraint_linear_284", gecode_constraint_linear_284, 6);
YAP_UserCPredicate("gecode_constraint_linear_283", gecode_constraint_linear_283, 6);
YAP_UserCPredicate("gecode_constraint_linear_288", gecode_constraint_linear_288, 6);
YAP_UserCPredicate("gecode_constraint_linear_287", gecode_constraint_linear_287, 6);
YAP_UserCPredicate("gecode_constraint_linear_276", gecode_constraint_linear_276, 6);
YAP_UserCPredicate("gecode_constraint_linear_275", gecode_constraint_linear_275, 6);
YAP_UserCPredicate("gecode_constraint_linear_280", gecode_constraint_linear_280, 6);
YAP_UserCPredicate("gecode_constraint_linear_279", gecode_constraint_linear_279, 6);
YAP_UserCPredicate("gecode_constraint_nooverlap_333", gecode_constraint_nooverlap_333, 7);
YAP_UserCPredicate("gecode_constraint_nooverlap_328", gecode_constraint_nooverlap_328, 7);
YAP_UserCPredicate("gecode_constraint_div_164", gecode_constraint_div_164, 5);
YAP_UserCPredicate("gecode_constraint_sqr_435", gecode_constraint_sqr_435, 4);
YAP_UserCPredicate("gecode_constraint_path_345", gecode_constraint_path_345, 8);
YAP_UserCPredicate("gecode_constraint_path_342", gecode_constraint_path_342, 8);
YAP_UserCPredicate("gecode_constraint_path_339", gecode_constraint_path_339, 8);
YAP_UserCPredicate("gecode_constraint_unary_447", gecode_constraint_unary_447, 5);
YAP_UserCPredicate("gecode_constraint_sqr_445", gecode_constraint_sqr_445, 4);
YAP_UserCPredicate("gecode_constraint_path_355", gecode_constraint_path_355, 8);
YAP_UserCPredicate("gecode_constraint_path_352", gecode_constraint_path_352, 8);
YAP_UserCPredicate("gecode_constraint_path_349", gecode_constraint_path_349, 8);
YAP_UserCPredicate("gecode_constraint_unary_457", gecode_constraint_unary_457, 5);
YAP_UserCPredicate("gecode_constraint_unary_460", gecode_constraint_unary_460, 5);
YAP_UserCPredicate("gecode_constraint_unary_453", gecode_constraint_unary_453, 5);
YAP_UserCPredicate("gecode_constraint_unary_456", gecode_constraint_unary_456, 5);
YAP_UserCPredicate("gecode_constraint_unary_450", gecode_constraint_unary_450, 5);
YAP_UserCPredicate("gecode_constraint_unary_443", gecode_constraint_unary_443, 5);
YAP_UserCPredicate("gecode_constraint_unary_446", gecode_constraint_unary_446, 5);
YAP_UserCPredicate("gecode_constraint_unary_440", gecode_constraint_unary_440, 5);
YAP_UserCPredicate("gecode_constraint_sorted_429", gecode_constraint_sorted_429, 4);
YAP_UserCPredicate("gecode_constraint_sorted_432", gecode_constraint_sorted_432, 4);
YAP_UserCPredicate("gecode_constraint_sorted_439", gecode_constraint_sorted_439, 4);
YAP_UserCPredicate("gecode_constraint_sorted_442", gecode_constraint_sorted_442, 4);
YAP_UserCPredicate("gecode_constraint_element_223", gecode_constraint_element_223, 8);
YAP_UserCPredicate("gecode_constraint_element_217", gecode_constraint_element_217, 8);
YAP_UserCPredicate("gecode_constraint_element_235", gecode_constraint_element_235, 8);
@ -500,7 +510,7 @@ YAP_UserCPredicate("gecode_constraint_element_238", gecode_constraint_element_23
YAP_UserCPredicate("gecode_constraint_element_231", gecode_constraint_element_231, 5);
YAP_UserCPredicate("gecode_constraint_element_237", gecode_constraint_element_237, 5);
YAP_UserCPredicate("gecode_constraint_element_229", gecode_constraint_element_229, 5);
YAP_UserCPredicate("gecode_constraint_sequence_428", gecode_constraint_sequence_428, 3);
YAP_UserCPredicate("gecode_constraint_sequence_438", gecode_constraint_sequence_438, 3);
YAP_UserCPredicate("gecode_constraint_branch_30", gecode_constraint_branch_30, 5);
YAP_UserCPredicate("gecode_constraint_branch_26", gecode_constraint_branch_26, 5);
YAP_UserCPredicate("gecode_constraint_branch_24", gecode_constraint_branch_24, 5);
@ -509,10 +519,10 @@ YAP_UserCPredicate("gecode_constraint_branch_36", gecode_constraint_branch_36, 5
YAP_UserCPredicate("gecode_constraint_branch_42", gecode_constraint_branch_42, 5);
YAP_UserCPredicate("gecode_constraint_branch_38", gecode_constraint_branch_38, 5);
YAP_UserCPredicate("gecode_constraint_circuit_79", gecode_constraint_circuit_79, 7);
YAP_UserCPredicate("gecode_constraint_pow_351", gecode_constraint_pow_351, 4);
YAP_UserCPredicate("gecode_constraint_pow_350", gecode_constraint_pow_350, 4);
YAP_UserCPredicate("gecode_constraint_precede_357", gecode_constraint_precede_357, 3);
YAP_UserCPredicate("gecode_constraint_precede_353", gecode_constraint_precede_353, 3);
YAP_UserCPredicate("gecode_constraint_pow_361", gecode_constraint_pow_361, 4);
YAP_UserCPredicate("gecode_constraint_pow_360", gecode_constraint_pow_360, 4);
YAP_UserCPredicate("gecode_constraint_precede_367", gecode_constraint_precede_367, 3);
YAP_UserCPredicate("gecode_constraint_precede_363", gecode_constraint_precede_363, 3);
YAP_UserCPredicate("gecode_constraint_cumulative_128", gecode_constraint_cumulative_128, 6);
YAP_UserCPredicate("gecode_constraint_cumulative_124", gecode_constraint_cumulative_124, 6);
YAP_UserCPredicate("gecode_constraint_cumulative_118", gecode_constraint_cumulative_118, 6);
@ -522,16 +532,16 @@ YAP_UserCPredicate("gecode_constraint_cumulative_136", gecode_constraint_cumulat
YAP_UserCPredicate("gecode_constraint_cumulative_130", gecode_constraint_cumulative_130, 6);
YAP_UserCPredicate("gecode_constraint_cumulative_133", gecode_constraint_cumulative_133, 6);
YAP_UserCPredicate("gecode_constraint_distinct_159", gecode_constraint_distinct_159, 4);
YAP_UserCPredicate("gecode_constraint_min_304", gecode_constraint_min_304, 3);
YAP_UserCPredicate("gecode_constraint_min_305", gecode_constraint_min_305, 3);
YAP_UserCPredicate("gecode_constraint_min_310", gecode_constraint_min_310, 3);
YAP_UserCPredicate("gecode_constraint_sqrt_438", gecode_constraint_sqrt_438, 4);
YAP_UserCPredicate("gecode_constraint_sequence_425", gecode_constraint_sequence_425, 6);
YAP_UserCPredicate("gecode_constraint_sequence_423", gecode_constraint_sequence_423, 6);
YAP_UserCPredicate("gecode_constraint_unshare_454", gecode_constraint_unshare_454, 3);
YAP_UserCPredicate("gecode_constraint_unshare_452", gecode_constraint_unshare_452, 3);
YAP_UserCPredicate("gecode_constraint_path_349", gecode_constraint_path_349, 6);
YAP_UserCPredicate("gecode_constraint_path_340", gecode_constraint_path_340, 6);
YAP_UserCPredicate("gecode_constraint_min_314", gecode_constraint_min_314, 3);
YAP_UserCPredicate("gecode_constraint_min_315", gecode_constraint_min_315, 3);
YAP_UserCPredicate("gecode_constraint_min_320", gecode_constraint_min_320, 3);
YAP_UserCPredicate("gecode_constraint_sqrt_448", gecode_constraint_sqrt_448, 4);
YAP_UserCPredicate("gecode_constraint_sequence_435", gecode_constraint_sequence_435, 6);
YAP_UserCPredicate("gecode_constraint_sequence_433", gecode_constraint_sequence_433, 6);
YAP_UserCPredicate("gecode_constraint_unshare_464", gecode_constraint_unshare_464, 3);
YAP_UserCPredicate("gecode_constraint_unshare_462", gecode_constraint_unshare_462, 3);
YAP_UserCPredicate("gecode_constraint_path_359", gecode_constraint_path_359, 6);
YAP_UserCPredicate("gecode_constraint_path_350", gecode_constraint_path_350, 6);
YAP_UserCPredicate("gecode_constraint_divmod_165", gecode_constraint_divmod_165, 5);
YAP_UserCPredicate("gecode_constraint_branch_31", gecode_constraint_branch_31, 6);
YAP_UserCPredicate("gecode_constraint_branch_27", gecode_constraint_branch_27, 6);
@ -540,11 +550,11 @@ YAP_UserCPredicate("gecode_constraint_branch_33", gecode_constraint_branch_33, 6
YAP_UserCPredicate("gecode_constraint_branch_37", gecode_constraint_branch_37, 6);
YAP_UserCPredicate("gecode_constraint_branch_43", gecode_constraint_branch_43, 6);
YAP_UserCPredicate("gecode_constraint_branch_39", gecode_constraint_branch_39, 6);
YAP_UserCPredicate("gecode_constraint_nooverlap_322", gecode_constraint_nooverlap_322, 9);
YAP_UserCPredicate("gecode_constraint_nooverlap_332", gecode_constraint_nooverlap_332, 9);
YAP_UserCPredicate("gecode_constraint_cumulative_120", gecode_constraint_cumulative_120, 5);
YAP_UserCPredicate("gecode_constraint_cumulative_132", gecode_constraint_cumulative_132, 5);
YAP_UserCPredicate("gecode_constraint_member_300", gecode_constraint_member_300, 3);
YAP_UserCPredicate("gecode_constraint_member_296", gecode_constraint_member_296, 3);
YAP_UserCPredicate("gecode_constraint_member_310", gecode_constraint_member_310, 3);
YAP_UserCPredicate("gecode_constraint_member_306", gecode_constraint_member_306, 3);
YAP_UserCPredicate("gecode_constraint_count_111", gecode_constraint_count_111, 6);
YAP_UserCPredicate("gecode_constraint_count_113", gecode_constraint_count_113, 6);
YAP_UserCPredicate("gecode_constraint_count_115", gecode_constraint_count_115, 6);
@ -553,8 +563,8 @@ YAP_UserCPredicate("gecode_constraint_count_103", gecode_constraint_count_103, 6
YAP_UserCPredicate("gecode_constraint_count_105", gecode_constraint_count_105, 6);
YAP_UserCPredicate("gecode_constraint_count_93", gecode_constraint_count_93, 6);
YAP_UserCPredicate("gecode_constraint_count_95", gecode_constraint_count_95, 6);
YAP_UserCPredicate("gecode_constraint_pow_352", gecode_constraint_pow_352, 5);
YAP_UserCPredicate("gecode_constraint_notMin_326", gecode_constraint_notMin_326, 3);
YAP_UserCPredicate("gecode_constraint_pow_362", gecode_constraint_pow_362, 5);
YAP_UserCPredicate("gecode_constraint_notMin_336", gecode_constraint_notMin_336, 3);
YAP_UserCPredicate("gecode_constraint_cumulative_127", gecode_constraint_cumulative_127, 8);
YAP_UserCPredicate("gecode_constraint_cumulative_123", gecode_constraint_cumulative_123, 8);
YAP_UserCPredicate("gecode_constraint_cumulative_139", gecode_constraint_cumulative_139, 8);
@ -577,54 +587,54 @@ YAP_UserCPredicate("gecode_constraint_dom_203", gecode_constraint_dom_203, 3);
YAP_UserCPredicate("gecode_constraint_dom_191", gecode_constraint_dom_191, 3);
YAP_UserCPredicate("gecode_constraint_dom_182", gecode_constraint_dom_182, 3);
YAP_UserCPredicate("gecode_constraint_dom_211", gecode_constraint_dom_211, 3);
YAP_UserCPredicate("gecode_constraint_linear_263", gecode_constraint_linear_263, 5);
YAP_UserCPredicate("gecode_constraint_linear_261", gecode_constraint_linear_261, 5);
YAP_UserCPredicate("gecode_constraint_linear_250", gecode_constraint_linear_250, 5);
YAP_UserCPredicate("gecode_constraint_linear_249", gecode_constraint_linear_249, 5);
YAP_UserCPredicate("gecode_constraint_linear_254", gecode_constraint_linear_254, 5);
YAP_UserCPredicate("gecode_constraint_linear_253", gecode_constraint_linear_253, 5);
YAP_UserCPredicate("gecode_constraint_linear_258", gecode_constraint_linear_258, 5);
YAP_UserCPredicate("gecode_constraint_linear_256", gecode_constraint_linear_256, 5);
YAP_UserCPredicate("gecode_constraint_linear_282", gecode_constraint_linear_282, 5);
YAP_UserCPredicate("gecode_constraint_linear_281", gecode_constraint_linear_281, 5);
YAP_UserCPredicate("gecode_constraint_linear_286", gecode_constraint_linear_286, 5);
YAP_UserCPredicate("gecode_constraint_linear_285", gecode_constraint_linear_285, 5);
YAP_UserCPredicate("gecode_constraint_linear_272", gecode_constraint_linear_272, 5);
YAP_UserCPredicate("gecode_constraint_linear_276", gecode_constraint_linear_276, 5);
YAP_UserCPredicate("gecode_constraint_linear_292", gecode_constraint_linear_292, 5);
YAP_UserCPredicate("gecode_constraint_linear_291", gecode_constraint_linear_291, 5);
YAP_UserCPredicate("gecode_constraint_linear_296", gecode_constraint_linear_296, 5);
YAP_UserCPredicate("gecode_constraint_linear_295", gecode_constraint_linear_295, 5);
YAP_UserCPredicate("gecode_constraint_linear_273", gecode_constraint_linear_273, 5);
YAP_UserCPredicate("gecode_constraint_linear_271", gecode_constraint_linear_271, 5);
YAP_UserCPredicate("gecode_constraint_linear_260", gecode_constraint_linear_260, 5);
YAP_UserCPredicate("gecode_constraint_linear_259", gecode_constraint_linear_259, 5);
YAP_UserCPredicate("gecode_constraint_linear_264", gecode_constraint_linear_264, 5);
YAP_UserCPredicate("gecode_constraint_linear_263", gecode_constraint_linear_263, 5);
YAP_UserCPredicate("gecode_constraint_linear_268", gecode_constraint_linear_268, 5);
YAP_UserCPredicate("gecode_constraint_nooverlap_317", gecode_constraint_nooverlap_317, 6);
YAP_UserCPredicate("gecode_constraint_nooverlap_320", gecode_constraint_nooverlap_320, 6);
YAP_UserCPredicate("gecode_constraint_linear_266", gecode_constraint_linear_266, 5);
YAP_UserCPredicate("gecode_constraint_linear_282", gecode_constraint_linear_282, 5);
YAP_UserCPredicate("gecode_constraint_linear_286", gecode_constraint_linear_286, 5);
YAP_UserCPredicate("gecode_constraint_linear_274", gecode_constraint_linear_274, 5);
YAP_UserCPredicate("gecode_constraint_linear_278", gecode_constraint_linear_278, 5);
YAP_UserCPredicate("gecode_constraint_nooverlap_327", gecode_constraint_nooverlap_327, 6);
YAP_UserCPredicate("gecode_constraint_nooverlap_330", gecode_constraint_nooverlap_330, 6);
YAP_UserCPredicate("gecode_constraint_element_245", gecode_constraint_element_245, 6);
YAP_UserCPredicate("gecode_constraint_element_243", gecode_constraint_element_243, 6);
YAP_UserCPredicate("gecode_constraint_element_241", gecode_constraint_element_241, 6);
YAP_UserCPredicate("gecode_constraint_element_239", gecode_constraint_element_239, 6);
YAP_UserCPredicate("gecode_constraint_rel_395", gecode_constraint_rel_395, 4);
YAP_UserCPredicate("gecode_constraint_rel_397", gecode_constraint_rel_397, 4);
YAP_UserCPredicate("gecode_constraint_rel_413", gecode_constraint_rel_413, 4);
YAP_UserCPredicate("gecode_constraint_rel_411", gecode_constraint_rel_411, 4);
YAP_UserCPredicate("gecode_constraint_rel_383", gecode_constraint_rel_383, 4);
YAP_UserCPredicate("gecode_constraint_rel_384", gecode_constraint_rel_384, 4);
YAP_UserCPredicate("gecode_constraint_rel_405", gecode_constraint_rel_405, 4);
YAP_UserCPredicate("gecode_constraint_rel_407", gecode_constraint_rel_407, 4);
YAP_UserCPredicate("gecode_constraint_rel_423", gecode_constraint_rel_423, 4);
YAP_UserCPredicate("gecode_constraint_rel_421", gecode_constraint_rel_421, 4);
YAP_UserCPredicate("gecode_constraint_rel_393", gecode_constraint_rel_393, 4);
YAP_UserCPredicate("gecode_constraint_rel_394", gecode_constraint_rel_394, 4);
YAP_UserCPredicate("gecode_constraint_rel_391", gecode_constraint_rel_391, 4);
YAP_UserCPredicate("gecode_constraint_rel_387", gecode_constraint_rel_387, 4);
YAP_UserCPredicate("gecode_constraint_rel_385", gecode_constraint_rel_385, 4);
YAP_UserCPredicate("gecode_constraint_rel_390", gecode_constraint_rel_390, 4);
YAP_UserCPredicate("gecode_constraint_rel_381", gecode_constraint_rel_381, 4);
YAP_UserCPredicate("gecode_constraint_rel_377", gecode_constraint_rel_377, 4);
YAP_UserCPredicate("gecode_constraint_rel_375", gecode_constraint_rel_375, 4);
YAP_UserCPredicate("gecode_constraint_rel_380", gecode_constraint_rel_380, 4);
YAP_UserCPredicate("gecode_constraint_rel_371", gecode_constraint_rel_371, 4);
YAP_UserCPredicate("gecode_constraint_rel_367", gecode_constraint_rel_367, 4);
YAP_UserCPredicate("gecode_constraint_rel_391", gecode_constraint_rel_391, 4);
YAP_UserCPredicate("gecode_constraint_rel_393", gecode_constraint_rel_393, 4);
YAP_UserCPredicate("gecode_constraint_rel_387", gecode_constraint_rel_387, 4);
YAP_UserCPredicate("gecode_constraint_rel_390", gecode_constraint_rel_390, 4);
YAP_UserCPredicate("gecode_constraint_rel_399", gecode_constraint_rel_399, 4);
YAP_UserCPredicate("gecode_constraint_rel_401", gecode_constraint_rel_401, 4);
YAP_UserCPredicate("gecode_constraint_rel_403", gecode_constraint_rel_403, 4);
YAP_UserCPredicate("gecode_constraint_rel_407", gecode_constraint_rel_407, 4);
YAP_UserCPredicate("gecode_constraint_rel_408", gecode_constraint_rel_408, 4);
YAP_UserCPredicate("gecode_constraint_rel_414", gecode_constraint_rel_414, 4);
YAP_UserCPredicate("gecode_constraint_rel_419", gecode_constraint_rel_419, 4);
YAP_UserCPredicate("gecode_constraint_rel_421", gecode_constraint_rel_421, 4);
YAP_UserCPredicate("gecode_constraint_rel_361", gecode_constraint_rel_361, 4);
YAP_UserCPredicate("gecode_constraint_rel_359", gecode_constraint_rel_359, 4);
YAP_UserCPredicate("gecode_constraint_min_309", gecode_constraint_min_309, 5);
YAP_UserCPredicate("gecode_constraint_rel_397", gecode_constraint_rel_397, 4);
YAP_UserCPredicate("gecode_constraint_rel_400", gecode_constraint_rel_400, 4);
YAP_UserCPredicate("gecode_constraint_rel_409", gecode_constraint_rel_409, 4);
YAP_UserCPredicate("gecode_constraint_rel_413", gecode_constraint_rel_413, 4);
YAP_UserCPredicate("gecode_constraint_rel_417", gecode_constraint_rel_417, 4);
YAP_UserCPredicate("gecode_constraint_rel_418", gecode_constraint_rel_418, 4);
YAP_UserCPredicate("gecode_constraint_rel_424", gecode_constraint_rel_424, 4);
YAP_UserCPredicate("gecode_constraint_rel_429", gecode_constraint_rel_429, 4);
YAP_UserCPredicate("gecode_constraint_rel_431", gecode_constraint_rel_431, 4);
YAP_UserCPredicate("gecode_constraint_rel_371", gecode_constraint_rel_371, 4);
YAP_UserCPredicate("gecode_constraint_rel_369", gecode_constraint_rel_369, 4);
YAP_UserCPredicate("gecode_constraint_min_319", gecode_constraint_min_319, 5);
YAP_UserCPredicate("gecode_constraint_count_108", gecode_constraint_count_108, 3);
YAP_UserCPredicate("gecode_constraint_count_98", gecode_constraint_count_98, 3);
YAP_UserCPredicate("gecode_constraint_ite_247", gecode_constraint_ite_247, 6);
YAP_UserCPredicate("gecode_constraint_ite_257", gecode_constraint_ite_257, 6);

View File

@ -72,5 +72,7 @@ clean:
install: all
mkdir -p $(DESTDIR)$(YAPLIBDIR)
mkdir -p $(DESTDIR)$(SHAREDIR)/Yap
mkdir -p $(DESTDIR)$(SHAREDIR)/Yap/gecode
$(INSTALL_PROGRAM) $(SOBJS) $(DESTDIR)$(YAPLIBDIR)
$(INSTALL) gecode.yap $(DESTDIR)$(SHAREDIR)/Yap
$(INSTALL) $(srcdir)/clpfd.yap $(DESTDIR)$(SHAREDIR)/Yap/gecode

View File

@ -0,0 +1,68 @@
%% -*- prolog -*-
%%=============================================================================
%% Copyright (C) 2011 by Denys Duchier
%%
%% This program is free software: you can redistribute it and/or modify it
%% under the terms of the GNU Lesser General Public License as published by the
%% Free Software Foundation, either version 3 of the License, or (at your
%% option) any later version.
%%
%% This program is distributed in the hope that it will be useful, but WITHOUT
%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
%% more details.
%%
%% You should have received a copy of the GNU Lesser General Public License
%% along with this program. If not, see <http://www.gnu.org/licenses/>.
%%=============================================================================
:- use_module(library(gecode/clpfd)).
:- use_module(library(maplist)).
% 5 people want to have a photograph together, but they have preferences.
photo(Ex, People, Amount) :-
ex(Ex, People, Preferences),
length(People, Len),
Len0 is Len-1,
People ins 0..Len0,
all_distinct(People),
% Bools are the satisfied constraints
maplist(preference_satisfied, Preferences, Bools),
length(Preferences, PLen),
Amount in 0..PLen,
sum( Bools ) #= Amount,
% add all satisfied constraints
maximize(Amount),
labeling([], People).
%reification, use with care
preference_satisfied(X-Y, B) :-
abs(X - Y) #= 1 #<==> B.
ex(s,[Alice,Bob,Carl,Deb,Evan], [Alice-Carl,
Carl-Deb,
Deb-Alice,
Evan-Alice,
Bob-Evan,
Carl-Evan,
Deb-Evan,
Evan-Bob]).
ex(l,[Betty,Chris,Donald,Fred,Gary,Mary,Paul,Peter,Susan],
[Betty-Donald,
Betty-Gary,
Betty-Peter,
Chris-Gary,
Chris-Susan,
Donald-Fred,
Donald-Gary,
Fred-Betty,
Fred-Gary,
Gary-Mary,
Gary-Betty,
Mary-Betty,
Mary-Susan,
Paul-Donald,
Paul-Peter,
Peter-Susan,
Peter-Paul]).

View File

@ -0,0 +1,38 @@
:- use_module(library(gecode/clpfd)).
:- use_module(library(maplist)).
queens(N, Queens) :-
length(Queens, N),
Queens ins 1..N,
all_distinct(Queens),
foldl(inc, Queens, Inc, 0, _), % [0, 1, 2, .... ]
foldl(dec, Queens, Dec, 0, _), % [0, -1, -2, ... ]
all_distinct(Inc,Queens),
all_distinct(Dec,Queens),
labeling([], Queens).
inc(_, I0, I0, I) :-
I is I0+1.
dec(_, I0, I0, I) :-
I is I0-1.
lqueens(N, Queens) :-
length(Queens, N),
Queens ins 1..N,
all_distinct(Queens),
lconstrain( Queens, 0 ),
labeling([], Queens).
lconstrain([], _).
lconstrain( [Q|Queens], I0) :-
I is I0+1,
foldl(constrain(Q, I0), Queens, I, _),
lconstrain( Queens, I).
constrain(Q, I, R, J, J1) :-
J1 is J+1,
Q + I #\= R + J,
Q - I #\= R - J.

View File

@ -0,0 +1,34 @@
%% -*- prolog -*-
%%=============================================================================
%% Copyright (C) 2011, 2013 by Denys Duchier, Vitor Santos Costa
%%
%% This program is free software: you can redistribute it and/or modify it
%% under the terms of the GNU Lesser General Public License as published by the
%% Free Software Foundation, either version 3 of the License, or (at your
%% option) any later version.
%%
%% This program is distributed in the hope that it will be useful, but WITHOUT
%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
%% more details.
%%
%% You should have received a copy of the GNU Lesser General Public License
%% along with this program. If not, see <http://www.gnu.org/licenses/>.
%%=============================================================================
:- use_module(library(gecode/clpfd)).
% S E N D
% + M O R E
% ---------
% M O N E Y
send_more_money(Letters) :-
[S,E,N,D,M,O,R,Y] = Letters,
Letters ins 0..9,
M #\= 0,
S #\= 0,
all_distinct(Letters),
1000*S + 100*E + 10*N + D +
1000*M + 100*O + 10*R + E #=
10000*M + 1000*O + 100*N + 10*E + Y,
labeling([], Letters).

View File

@ -0,0 +1,36 @@
%% -*- prolog -*-
%%=============================================================================
%% Copyright (C) 2011, 2013 by Denys Duchier, Vitor Santos Costa
%%
%% This program is free software: you can redistribute it and/or modify it
%% under the terms of the GNU Lesser General Public License as published by the
%% Free Software Foundation, either version 3 of the License, or (at your
%% option) any later version.
%%
%% This program is distributed in the hope that it will be useful, but WITHOUT
%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
%% more details.
%%
%% You should have received a copy of the GNU Lesser General Public License
%% along with this program. If not, see <http://www.gnu.org/licenses/>.
%%=============================================================================
:- use_module(library(gecode/clpfd)).
% S E N D
% + M O S T
% ---------
% M O N E Y
send_most_money(Letters, Money) :-
[S,E,N,D,M,O,T,Y] = Letters,
Letters ins 0..9,
Money in 0..99999,
M #\= 0,
S #\= 0,
all_distinct(Letters),
1000*S + 100*E + 10*N + D +
1000*M + 100*O + 10*S + T #= Money,
10000*M + 1000*O + 100*N + 10*E + Y #= Money,
maximize(Money),
labeling([], Letters).

View File

@ -0,0 +1,71 @@
:- use_module(library(gecode/clpfd)).
:- use_module(library(maplist)).
test0(X) :-
X in 1..10,
X #= 2.
test1(X) :-
X in 1..10,
Y in 3..7,
Z in 1..4,
X / Y #= Z,
labeling([], [X]).
test2(X) :-
X in 1..10,
X / 4 #= 2,
labeling([], [X]).
test3(A) :-
A = [X,Y,Z],
A ins 1..4,
Y #> 2,
lex_chain(A),
all_different(A),
labeling([], [X,Y,Z]).
test4(A) :-
A = [X,Y,Z],
A ins 1..4,
Y #> 2,
Z #> 3,
lex_chain(A),
min(A, 1),
all_different(A),
labeling([], [X,Y,Z]).
test5(A) :-
A = [X,Y,Z],
A ins 0..1,
in_relation( A, [[0,0,0],[0,1,0],[1,0,0]] ),
X #> 0,
labeling([], A).
test6(A+B) :-
A = [X,Y,Z],
B = [X1,Y1,Z1],
A ins 0..1,
B ins 0..1,
extensional_constraint([[0,0,0],[0,1,0],[1,0,0]], C),
in_relation( A, C ),
in_relation( B, C ),
X #> 0,
X1 #< X,
Y1 #\= Z1,
labeling([], A),
labeling([], B).
test7(A) :-
A = [X,Y,Z],
A ins 0..1,
in_dfa( A, 0, [t(0,0,0),t(0,1,1),t(1,0,0),t(-1,0,0)], [0]),
X #> 0,
labeling([], A).
test8(A+B) :-
A = [X,Y,Z,W],
B = [X1,Y1,Z1,W1],
A ins 0..1,
B ins 0..1,
dfa( 0, [t(0,0,0),t(0,1,1),t(1,0,0),t(-1,0,0)], [0], C),
in_dfa( A, C ),
in_dfa( B, C ),
X #> 0,
X1 #< X,
Y1 #\= Z1,
labeling([], A),
labeling([], B).

779
library/gecode/clpfd.yap Normal file
View File

@ -0,0 +1,779 @@
:- module(clpfd, [
op(760, yfx, #<==>),
op(750, xfy, #==>),
op(750, yfx, #<==),
op(740, yfx, #\/),
op(730, yfx, #\),
op(720, yfx, #/\),
op(710, fy, #\),
op(700, xfx, #>),
op(700, xfx, #<),
op(700, xfx, #>=),
op(700, xfx, #=<),
op(700, xfx, #=),
op(700, xfx, #\=),
op(700, xfx, in),
op(700, xfx, ins),
op(450, xfx, ..), % should bind more tightly than \/
(#>)/2,
(#<)/2,
(#>=)/2,
(#=<)/2,
(#=)/2,
(#\=)/2,
(#<==>)/2,
(#==>)/2,
(#<==)/2,
(#\)/1,
(#\/)/2,
(#/\)/2,
in/2 ,
ins/2,
all_different/1,
all_distinct/1,
all_distinct/2,
maximize/1,
sum/3,
lex_chain/1,
minimum/2,
min/2,
maximum/2,
max/2,
scalar_product/4,
extensional_constraint/2,
in_relation/2,
dfa/4,
in_dfa/2,
in_dfa/4, /*
tuples_in/2, */
labeling/2 /*,
label/1,
indomain/1,
serialized/2,
global_cardinality/2,
global_cardinality/3,
circuit/1,
element/3,
automaton/3,
automaton/8,
transpose/2,
zcompare/3,
chain/2,
fd_var/1,
fd_inf/2,
fd_sup/2,
fd_size/2,
fd_dom/2 */
]).
:- use_module(library(gecode)).
:- use_module(library(maplist)).
constraint( (_ #> _) ).
constraint( (_ #< _) ).
constraint( (_ #>= _) ).
constraint( (_ #=< _) ).
constraint( (_ #= _) ).
constraint( (_ #\= _) ).
constraint( (_ #\ _) ).
constraint( (_ #<==> _) ).
constraint( (_ #==> _) ).
constraint( (_ #<== _) ).
constraint( (_ #\/ _) ).
constraint( (_ #/\ _) ).
constraint( in(_, _) ). %2,
constraint( ins(_, _) ). %2,
constraint( all_different(_) ). %1,
constraint( all_distinct(_) ). %1,
constraint( all_distinct(_,_) ). %1,
constraint( sum(_, _, _) ). %3,
constraint( scalar_product(_, _, _, _) ). %4,
constraint( min(_, _) ). %2,
constraint( minimum(_, _) ). %2,
constraint( max(_, _) ). %2,
constraint( maximum(_, _) ). %2,
constraint( in_relation(_, _) ). %2,
constraint( in_dfa(_, _) ). %2,
constraint( in_dfa(_, _, _, _) ). %2,
constraint( tuples_in(_, _) ). %2,
constraint( labeling(_, _) ). %2,
constraint( label(_) ). %1,
constraint( indomain(_) ). %1,
constraint( lex_chain(_) ). %1,
constraint( serialized(_, _) ). %2,
constraint( global_cardinality(_, _) ). %2,
constraint( global_cardinality(_, _, _) ). %3,
constraint( circuit(_) ). %1,
constraint( element(_, _, _) ). %3,
constraint( automaton(_, _, _) ). %3,
constraint( automaton(_, _, _, _, _, _, _, _) ). %8,
constraint( transpose(_, _) ). %2,
constraint( zcompare(_, _, _) ). %3,
constraint( chain(_, _) ). %2,
constraint( fd_var(_) ). %1,
constraint( fd_inf(_, _) ). %2,
constraint( fd_sup(_, _) ). %2,
constraint( fd_size(_, _) ). %2,
constraint( fd_dom(_, _) ). %2
process_constraints((B0,B1), (NB0, NB1), Env) :-
process_constraints(B0, NB0, Env),
process_constraints(B1, NB1, Env).
process_constraints(B, B, env(_Space)) :-
constraint(B), !.
process_constraints(B, B, _Env).
% process_constraint(B, NB, Space).
( A #= B) :-
get_home(Env),
post( rel(A, (#=), B), Env, _).
( A #\= B) :-
get_home(Env),
post( rel(A, (#\=), B), Env, _).
( A #< B) :-
get_home(Env),
post( rel(A, (#<), B), Env, _).
( A #> B) :-
get_home(Env),
post( rel(A, (#>), B), Env, _).
( A #=< B) :-
get_home(Env),
post( rel(A, (#=<), B), Env, _).
( A #>= B) :-
get_home(Env),
post( rel(A, (#>=), B), Env, _).
sum( L, Op, V) :-
get_home( Env ),
post( rel(sum(L), Op, V), Env, _).
( A #<==> VBool) :-
get_home(Space-Map),
Bool := boolvar(Space),
m( VBool, Bool, 0, 1, Map),
Space += reify(Bool, 'RM_EQV', R),
post(A, Space-Map, R).
( A #==> VBool) :-
get_home(Space-Map),
Bool := boolvar(Space),
m( VBool, Bool, 0, 1, Map),
Space += reify(Bool, 'RM_IMP', R),
post(A, Space-Map, R).
( A #<== VBool) :-
get_home(Space-Map),
Bool := boolvar(Space),
m( VBool, Bool, 0, 1, Map),
Space += reify(Bool, 'RM_PMI', R),
post(A, Space-Map, R).
'#\\'(A) :-
get_home(Space-Map),
B := boolvar(Space),
Space += reify(B, 'RM_EQV', R),
Space += rel(B, 'BOT_EQV', 0),
post(A, Space-Map, R).
( A1 #\/ A2 ) :-
get_home(Space-Map),
B1 := boolvar(Space),
B2 := boolvar(Space),
Space += reify(B1, 'RM_EQV', R1),
Space += reify(B2, 'RM_EQV', R2),
post(A1, Space-Map, R1),
post(A2, Space-Map, R2),
Space += rel(B1, B2, 'BOT_OR', 1).
( A1 #/\ A2 ) :-
get_home(Space-Map),
B1 := boolvar(Space),
B2 := boolvar(Space),
Space += reify(B1, 'RM_EQV', R1),
Space += reify(B2, 'RM_EQV', R2),
post(A1, Space-Map, R1),
post(A2, Space-Map, R2),
Space += rel(B1, B2, 'BOT_AND', 1).
( X in A..B) :-
get_home(Space-Map),
m(X, NX, A, B, Map),
NX := intvar(Space, A, B).
( Xs ins A..B) :-
get_home(Space-Map),
maplist(lm(A, B, Map), Xs, NXs),
length(Xs, N),
NXs := intvars(Space, N, A, B).
all_different( Xs ) :-
get_home(Env),
post( all_different( Xs ), Env, _ ).
all_distinct( Xs ) :-
get_home(Env),
post( all_distinct( Xs ), Env, _ ).
all_distinct( Cs, Xs ) :-
get_home(Env),
post( all_distinct( Cs, Xs ), Env, _ ).
scalar_product( Cs, Vs, Rels, X ) :-
get_home(Env),
post( scalar_product( Cs, Vs, Rels, X ), Env, _ ).
lex_chain( Cs ) :-
get_home(Env),
post( rel( Cs, '#=<' ), Env, _ ).
minimum( V, Xs ) :-
get_home(Env),
post( rel( min(Xs), (#=), V ), Env, _ ).
min( Xs, V ) :-
get_home(Env),
post( rel( min(Xs), (#=), V ), Env, _ ).
maximum( V, Xs ) :-
get_home(Env),
post( rel( max(Xs), (#=), V ), Env, _ ).
max( Xs, V ) :-
get_home(Env),
post( rel( max(Xs), (#=), V ), Env, _ ).
in_relation( Xs, Rel ) :-
get_home(Env),
post(in_tupleset(Xs, Rel), Env, _ ).
in_dfa( Xs, Rel ) :-
get_home(Env),
post(in_dfa(Xs, Rel), Env, _ ).
in_dfa( Xs, S0, Ts, Fs ) :-
get_home(Env),
post(in_dfa(Xs, S0, Ts, Fs), Env, _ ).
labeling(_Opts, Xs) :-
get_home(Space-Map),
maplist(ll(Map), Xs, NXs),
Space += branch(NXs, 'INT_VAR_SIZE_MIN', 'INT_VAL_MIN').
maximize(V) :-
get_home(Space-Map),
l(V, I, Map),
Space += maximize(I).
extensional_constraint( Tuples, TupleSet) :-
TupleSet := tupleset( Tuples ).
dfa( S0, Transitions, Finals, DFA) :-
DFA := dfa( S0, Transitions, Finals ).
post( ( A #= B), Env, Reify) :-
post( rel( A, (#=), B), Env, Reify).
post( ( A #\= B), Env, Reify) :-
post( rel( A, (#\=), B), Env, Reify).
post( ( A #> B), Env, Reify) :-
post( rel( A, (#>), B), Env, Reify).
post( ( A #< B), Env, Reify) :-
post( rel( A, (#<), B), Env, Reify).
post( ( A #>= B), Env, Reify) :-
post( rel( A, (#>=), B), Env, Reify).
post( ( A #=< B), Env, Reify) :-
post( rel( A, (#=<), B), Env, Reify).
% X #< Y
% X #< 2
post( rel( A, Op, B), Space-Map, Reify):-
var(A),
( var(B) -> l(B, IB, Map) ; integer(B) -> IB = B ), !,
l(A, IA, Map),
gecode_arith_op( Op, GOP ),
(var(Reify) -> Space += rel(IA, GOP, IB) ;
Space += rel(IA, GOP, IB, Reify) ).
% 2 #\= B
post( rel( A, Op, B), Space-Map, Reify):-
var(B), integer(A), !,
l(B, IB, Map),
gecode_arith_op( Op, GOP ),
(var(Reify) -> Space += rel(A, GOP, IB) ;
Space += rel(A, GOP, IB, Reify) ).
% sum([A,B,C]) #= X
post( rel( sum(L), Op, Out), Space-Map, Reify):-
checklist( var, L ),
( var(Out) -> l(Out, IOut, Map) ; integer(Out) -> IOut = Out ), !,
var(Out), !,
maplist(ll(Map), [Out|L], [IOut|IL] ),
gecode_arith_op( Op, GOP ),
(var(Reify) ->
Space += linear(IL, GOP, IOut);
Space += linear(IL, GOP, IOut, Reify)
).
% [A,B,C,D] #< 3
post( rel( A, Op ), Space-Map, Reify):-
checklist( var, A ), !,
maplist(ll(Map), A, IL ),
gecode_arith_op( Op, GOP ),
(var(Reify) -> Space += rel(IL, GOP) ;
Space += rel(IL, GOP, IB) ).
post( rel( A, Op, B), Space-Map, Reify):-
var( A ), !,
( var(B) -> l(B, IB, Map) ; integer(B) -> IB = B ), !,
l(A, IA, Map),
gecode_arith_op( Op, GOP ),
(var(Reify) -> Space += rel(IA, GOP, IB) ;
Space += rel(IA, GOP, IB, Reify) ).
post( rel( A, Op, B), Space-Map, Reify):-
checklist( var, A ),
( var(B) -> l(B, IB, Map) ; integer(B) -> IB = B ), !,
maplist(ll(Map), A, IL ),
gecode_arith_op( Op, GOP ),
(var(Reify) -> Space += rel(IL, GOP, IB) ;
Space += rel(IL, GOP, IB, Reify) ).
post( rel(A, Op, B), Space-Map, Reify):-
( nonvar(A), ( A = _+_ ; A = _-_ ) ;
nonvar(B), ( B = _ + _ ; B = _-_) ), !,
linearize(A, 1, As, Bs, CAs, CBs, 0, A0, Space-Map),
linearize(B, -1, Bs, [], CBs, [], A0, B0, Space-Map),
gecode_arith_op( Op, GOP ),
(var(Reify) ->
( checklist(is_one, CAs) ->
Space += linear(As, GOP, B0);
Space += linear(CAs, As, GOP, B0)
)
;
( checklist(is_one, CAs) ->
Space += linear(As, GOP, B0, Reify);
Space += linear(CAs, As, GOP, B0, Reify)
)
).
post( rel(A, Op, B), Space-Map, Reify):-
nonvar(A),
arith(A, Name),
A =.. [_Op,A1],
is_list(A1), !,
( _Op = min -> true ; _Op = max ),
maplist(equality_l( Space-Map), A1, NA1),
maplist(in_c_l( Space-Map), NA1, VA1),
equality(B, B1, Space-Map),
out_c(Name, VA1, B1, Op, Space-Map, Reify).
post( rel(A, Op, B), Space-Map, Reify):-
nonvar(A),
arith(A, Name),
A =.. [_Op,A1], !,
equality(A1, NA1, Space-Map),
in_c(NA1, VA1, Space-Map), !,
equality(B, B1, Space-Map),
out_c(Name, VA1, B1, Op, Space-Map, Reify).
post( rel(A, Op, B), Space-Map, Reify):-
nonvar(A),
arith(A, Name),
A =.. [_Op,A1,A2], !,
equality(A1, NA1, Space-Map),
in_c(NA1, VA1, Space-Map),
equality(A2, NA2, Space-Map),
in_c(NA2, VA2, Space-Map),
equality(B, B1, Space-Map),
out_c(Name, VA1, VA2, B1, Op, Space-Map, Reify).
post( scalar_product(Cs, L, Op, Out), Space-Map, Reify):-
var(Out), !,
maplist(ll(Map), [Out|L], [IOut|IL] ),
gecode_arith_op( Op, GOP ),
(var(Reify) ->
Space += linear(Cs, IL, GOP, IOut);
Space += linear(Cs, IL, GOP, IOut, Reify)
).
post( scalar_product(Cs, L, Op, Out), Space-Map, Reify):-
integer(Out), !,
maplist(ll(Map), L, IL ),
gecode_arith_op( Op, GOP ),
(var(Reify) ->
Space += linear(Cs, IL, GOP, Out);
Space += linear(Cs, IL, GOP, Out, Reify)
).
post( all_different( Xs ), Space-Map, Reify) :-
maplist(ll(Map), Xs, NXs),
(var(Reify) ->
Space += distinct(NXs)
;
throw(error(domain(not_reifiable),all_different( Xs )))
).
post( all_distinct( Xs ), Space-Map, Reify) :-
maplist(ll(Map), Xs, NXs),
(var(Reify) ->
Space += distinct(NXs)
;
throw(error(domain(not_reifiable),all_distinct( Xs )))
).
post( all_distinct( Cs , Xs ), Space-Map, Reify) :-
maplist(ll(Map), Xs, NXs),
(var(Reify) ->
Space += distinct(Cs,NXs)
;
throw(error(domain(not_reifiable),all_distinct( Cs , Xs )))
).
post(in_tupleset(Xs, Tuples), Space-Map, Reify) :-
is_list( Tuples ), !,
TS := tupleset( Tuples ),
maplist(ll(Map), Xs, IXs),
(var(Reify) ->
Space += extensional(IXs, TS)
;
throw(error(domain(not_reifiable),in_relation(Xs, Tuples)))
).
post(in_tupleset(Xs, TS), Space-Map, Reify) :-
maplist(ll(Map), Xs, IXs),
(var(Reify) ->
Space += extensional(IXs, TS)
;
throw(error(domain(not_reifiable),in_relation(Xs, Tuples)))
).
post(in_dfa(Xs, S0, Trs, Fs), Space-Map, Reify) :-
TS := dfa( S0, Trs, Fs ),
maplist(ll(Map), Xs, IXs),
(var(Reify) ->
Space += extensional(IXs, TS)
;
throw(error(domain(not_reifiable),in_dfa(Xs, Tuples)))
).
post(in_dfa(Xs, TS), Space-Map, Reify) :-
maplist(ll(Map), Xs, IXs),
(var(Reify) ->
Space += extensional(IXs, TS)
;
throw(error(domain(not_reifiable),in_dfa(Xs, Tuples)))
).
gecode_arith_op( (#=) , 'IRT_EQ' ).
gecode_arith_op( (#\=) , 'IRT_NQ' ).
gecode_arith_op( (#>) , 'IRT_GR' ).
gecode_arith_op( (#>=) , 'IRT_GQ' ).
gecode_arith_op( (#<) , 'IRT_LE' ).
gecode_arith_op( (#=<) , 'IRT_LQ' ).
linearize(V, C, [A|As], As, [C|CAs], CAs, I, I, _-Map) :-
var(V), !,
l(V, A, Map).
linearize(A+B, C, As, Bs, CAs, CBs, I, IF, Env) :-
linearize(A, C, As, A1s, CAs, CA1s, I, I1, Env),
linearize(B, C, A1s, Bs, CA1s, CBs, I1, IF, Env).
linearize(A-B, C, As, Bs, CAs, CBs, I, IF, Env) :-
NC is -C,
linearize(A, C, As, A1s, CAs, CA1s, I, I1, Env),
linearize(B, NC, A1s, Bs, CA1s, CBs, I1, IF, Env).
linearize(A, C, As, As, CAs, CAs, I, IF, _) :-
integer(A), !,
IF is I-C*A.
linearize(A, C, As, As, CAs, CAs, I, IF, _) :-
ground(A),
catch( (B is eval(A)), _, fail ), !,
IF is I-C*B.
linearize(C1*B, C, As, Bs, CAs, CBs, I, IF, Env) :-
integer(C1), !,
NC is C*C1,
linearize(B, NC, As, Bs, CAs, CBs, I, IF, Env).
linearize(B*C1, C, As, Bs, CAs, CBs, I, IF, Env) :-
integer(C1), !,
NC is C*C1,
linearize(B, NC, As, Bs, CAs, CBs, I, IF, Env).
linearize(AC, C, [A|Bs], Bs, [C|CBs], CBs, I, I, Env) :-
arith(AC, _),
equality(AC, V, Env),
Env = _-Map,
l(V, A, Map).
arith(abs(_), abs).
arith(min(_), min).
arith(max(_), max).
arith(min(_,_), min).
arith(max(_,_), max).
arith((_ * _), times).
arith((_ / _), div).
arith((_ mod _), mod).
% replace abs(min(A,B)-max(A,B)) by
% min(A,B,A1), max(A,B,A2), linear([1,-1],[A1,B1],=,A3), abs(A3,AN)
equality(V, V, _Env) :-
var( V ), !.
equality(V, V, _Env) :-
integer( V ), !.
equality(abs(V), NV, Env) :-
equality(V, VA, Env),
new_arith(abs, VA, NV, Env).
equality(min(V), NV, Env) :-
maplist( equality_l(Env), V, VA ),
new_arith(min, VA, NV, Env).
equality(max(V), NV, Env) :-
maplist( equality_l(Env), V, VA ),
new_arith(max, VA, NV, Env).
equality(V1+V2, NV, Env) :-
equality(V1, V1A, Env),
equality(V2, V2A, Env),
new_arith( plus, V1A, V2A, NV, Env).
equality(V1-V2, NV, Env) :-
equality(V1, V1A, Env),
equality(V2, V2A, Env),
new_arith( minus, V1A, V2A, NV, Env).
equality(V1*V2, NV, Env) :-
equality(V1, V1A, Env),
equality(V2, V2A, Env),
new_arith( times, V1A, V2A, NV, Env).
equality(V1/V2, NV, Env) :-
equality(V1, V1A, Env),
equality(V2, V2A, Env),
new_arith( div, V1A, V2A, NV, Env).
equality(V1 mod V2, NV, Env) :-
equality(V1, V1A, Env),
equality(V2, V2A, Env),
new_arith( (mod), V1A, V2A, NV, Env).
equality(max( V1 , V2), NV, Env) :-
equality(V1, V1A, Env),
equality(V2, V2A, Env),
new_arith( (max), V1A, V2A, NV, Env).
equality(min( V1 , V2), NV, Env) :-
equality(V1, V1A, Env),
equality(V2, V2A, Env),
new_arith( (min), V1A, V2A, NV, Env).
equality_l(Env, V0, V) :-
equality(V0, V, Env).
% abs(X) #= 3
out_c(Name, A1, B, Op, Space-Map, Reify) :-
integer(B), !,
new_arith( Name, A1, NB, Space-Map),
gecode_arith_op( Op, BOP ),
l(NB, IB, Map),
( var(Reify) ->
Space += rel(IB, BOP, B)
;
Space += rel(IB, BOP, B, Reify)
).
% abs(X) #= Cin[..]
out_c(Name, A1, B, (#=), Space-Map, Reify) :-
var(Reify),
l(B, IB, Map), !,
l(A1, IA1, Map),
G =.. [Name, IA1, IB],
Space += G.
% abs(X) #= NEW
out_c(Name, A1, B, (#=), Space-Map, Reify) :-
var(Reify), !,
new_arith( Name, A1, B, Space-Map).
% abs(X) #> NEW
out_c(Name, A1, B, Op, Space-Map, Reify) :-
l(B, IB0, Map), !,
new_arith( Name, A1, NB, Space-Map),
l(NB, IB, Map),
gecode_arith_op( Op, BOP ),
(
nonvar(Reify) ->
Space += rel(IB, BOP, IB0)
;
Space += rel(IB, BOP, IB0, Reify)
).
% X*Y #= 3
out_c(Name, A1, A2, B, Op, Space-Map, Reify) :-
integer(B), !,
new_arith( Name, A1, A2, NB, Space-Map),
l(NB, IB, Map),
gecode_arith_op( Op, BOP ),
( var(Reify) ->
Space += rel(IB, BOP, B)
;
Space += rel(IB, BOP, B, Reify)
).
% X*Y #= Cin[..]
out_c(Name, A1, A2, B, (#=), Space-Map, Reify) :-
var(Reify),
l(B, IB, Map), !,
l(A1, IA1, Map),
l(A2, IA2, Map),
G =.. [Name, IA1, IA2, IB],
Space += G.
% abs(X) #= NEW, cannot be reified
out_c(Name, A1, A2, B, (#=), Space-Map, Reify) :-
var(Reify), !,
new_arith( Name, A1, A2, B, Space-Map).
% min(X,Y) #= Cin[..] <=>
out_c(Name, A1, A2, B, Space-Map, Reify) :-
l(B, IB0, Map), !,
new_arith( Name, A1, A2, NB, Space-Map),
l(NB, IB, Map),
gecode_arith_op( Op, BOP ),
( var(Reify) ->
Space += rel(IB, BOP, IB0)
;
Space += rel(IB, BOP, IB0, Reify)
).
new_arith( abs, V, NV, Space-Map) :-
l(V, X, Min0, Max0, Map),
( Min0 < 0 ->
( Max0 < 0 -> Min is -Max0, Max is -Min0 ;
Min = 0 , Max is max( -Min0, Max0 ) )
;
Min = Min0, Max = Max0
),
NX := intvar(Space, Min, Max),
m(NV, NX, Min, Max, Map),
Space += abs(X, NX).
new_arith( min, V, NV, Space-Map) :-
V = [V1|RV],
l(V1, X1, Min0, Max0, Map),
foldl2( min_l(Map), RV, Max0, Max, Min0, Min),
NX := intvar(Space, Min, Max),
m(NV, NX, Min, Max, Map),
maplist(ll(Map), V, X),
Space += min(X, NX).
new_arith( max, V, NV, Space-Map) :-
V = [V1|RV],
l(V1, X, Min0, Max0, Map),
foldl2( max_l(Map), RV, Max0, Max, Min0, Min),
NX := intvar(Space, Min, Max),
m(NV, NX, Min, Max, Map),
maplist(ll(Map), V, X),
Space += min(X, NX).
new_arith( minus, V1, V2, NV, Space-Map) :-
l(V1, X1, Min1, Max1, Map),
l(V2, X2, Min2, Max2, Map),
Min is Min1-Max2,
Max is Max1-Min2,
NX := intvar(Space, Min, Max),
m(NV, NX, Min, Max, Map),
Space += linear([1,-1], [X1,X2], 'IRT_EQ', NX).
new_arith( plua, V1, V2, NV, Space-Map) :-
l(V1, X1, Min1, Max1, Map),
l(V2, X2, Min2, Max2, Map),
Min is Min1+Min2,
Max is Max1+Max2,
NX := intvar(Space, Min, Max),
m(NV, NX, Min, Max, Map),
Space += linear([1,1], [X1,X2], 'IRT_EQ', NX).
new_arith( min, V1, V2, NV, Space-Map) :-
l(V1, X1, Min1, Max1, Map),
l(V2, X2, Min2, Max2, Map),
Min is min(Min1,Min2),
Max is min(Max1,Max2),
NX := intvar(Space, Min, Max),
m(NV, NX, Min, Max, Map),
Space += min(X1, X2, NX).
new_arith( max, V1, V2, NV, Space-Map) :-
l(V1, X1, Min1, Max1, Map),
l(V2, X2, Min2, Max2, Map),
Min is max(Min1,Min2),
Max is max(Max1,Max2),
NX := intvar(Space, Min, Max),
m(NV, NX, Min, Max, Map),
Space += max(X1, X2, NX).
new_arith( times, V1, V2, NV, Space-Map) :-
l(V1, X1, Min1, Max1, Map),
l(V2, X2, Min2, Max2, Map),
min_times(Min1,Min2,Max1,Max2,Min),
max_times(Min1,Min2,Max1,Max2,Max),
NX := intvar(Space, Min, Max),
m(NV, NX, Min, Max, Map),
Space += times(X1, X2, NX).
new_arith( (div), V1, V2, NV, Space-Map) :-
l(V1, X1, Min1, Max1, Map),
l(V2, X2, Min2, Max2, Map),
min_div(Min1,Min2,Max1,Max2,Min),
max_div(Min1,Min2,Max1,Max2,Max),
NX := intvar(Space, Min, Max),
m(NV, NX, Min, Max, Map),
Space += div(X1, X2, NX).
new_arith( (mod), V1, V2, NV, Space-Map) :-
l(V1, X1, _Min1, Max1, Map),
l(V2, X2, Min2, Max2, Map),
Min is 0,
Max is min(abs(Max1), Max2-1),
NX := intvar(Space, Min, Max),
m(NV, NX, Min, Max, Map),
Space += mod(X1, X2, NX).
min_times(Min1,Min2,Max1,Max2,Min) :-
Min is min(Min1*Min2, min(Min1*Max2, min(Max1*Min2, Max1*Max2))).
max_times(Min1,Min2,Max1,Max2,Max) :-
Max is max(Min1*Min2, max(Min1*Max2, max(Max1*Min2, Max1*Max2))).
min_div(Min1,Min20,Max1,Max20,Min) :-
( Min20 == 0 -> Min2 = 1 ; Min2 = Min20),
( Max20 == 0 -> Max2 = -1; Max2 = Max20),
Min is min(Min1 div Min2, min(Min1 div Max2, min(Max1 div Min2, Max1 div Max2))).
max_div(Min1,Min20,Max1,Max20,Max) :-
( Min20 == 0 -> Min2 = 1 ; Min2 = Min20),
( Max20 == 0 -> Max2 = -1; Max2 = Max20),
Max is max(Min1 div Min2, max(Min1 div Max2, max(Max1 div Min2, Max1 div Max2))).
min_l(Map, V, Min0, Min, Max0, Max) :-
l(V, _, Min1, Max1, Map),
Min is min(Min0, Min1),
Max is min(Max0, Max1).
max_l(Map, V, Min0, Min, Max0, Max) :-
l(V, _, Min1, Max1, Map),
Min is max(Min0, Min1),
Max is max(Max0, Max1).
in_c(A, A, _y) :-
var(A), !.
in_c(C, A, Space-Map) :-
integer(C),
Min is C-1,
NX := intvar(Space, Min, C),
m(A, NX, Min, C, Map),
Space += rel(NX, 'IRT_EQ', C).
in_c_l(Env, V, IV) :-
in_c(V, IV, Env).
user:term_expansion( ( H :- B), (H :- (clpfd:init_gecode(Space, Me), NB, clpfd:close_gecode(Space, Vs, Me)) ) ) :-
process_constraints(B, NB, Env),
term_variables(H, Vs),
nonvar( Env ), !,
Env = env( Space ).
init_gecode(Space, old) :-
nb_current(gecode_space, Space), nonvar(Space), !.
init_gecode(Space-Map, new) :-
Space := space,
b_setval(gecode_space, Space-Map).
close_gecode(_Space, _Vs, old) :- !.
close_gecode(Space-Map, Vs0, new) :-
term_variables(Vs0, Vs),
selectlist(intvar(Map), Vs, CVs),
maplist(ll(Map), CVs, IVs),
SolSpace := search(Space),
CVs := val(SolSpace,IVs).
intvar(Map, V) :-
l(V, _IV, Map).
get_home(Home) :-
b_getval(gecode_space, Home).
m(NV, OV, NA, NB, Vs) :-
var(Vs), !,
Vs = [v(NV,OV,NA,NB)|_].
m(NV, OV, NA, NB, [_|Vs]) :-
m(NV, OV, NA, NB, Vs).
lm(A, B, Map, X, Y) :-
m(X, Y, A, B, Map).
l(NV, OV, Vs) :-
var(Vs), !,
fail.
l(NV, OV, [v(V, OV, _A, _B)|_Vs]) :-
V == NV, !.
l(NV, OV, [_|Vs]) :-
l(NV, OV, Vs).
ll(Map, X, Y) :-
l(X, Y, Map).
l(NV, OV, _, _, Vs) :-
var(Vs), !,
fail.
l(NV, OV, A, B, [v(V, OV, A, B)|_Vs]) :-
V == NV, !.
l(NV, OV, A, B, [_|Vs]) :-
l(NV, OV, A, B, Vs).
is_one(1).

View File

@ -190,9 +190,7 @@ class DeclsLoader(object):
class PredGenerator(DeclsLoader):
OMIT = ("DFA", # NOT YET SUPPORTED!!!
"TupleSet", # NOT YET SUPPORTED!!!
"VarBranchOptions",
OMIT = ("VarBranchOptions",
"ValBranchOptions",
"TieBreakVarBranch<IntVarBranch>",
"TieBreak<IntVarBranch>",

View File

@ -0,0 +1,95 @@
# This file was automatically extracted from Gecode source files.
# It is subject to the same Copyright as the source files from which
# it is derived, and is distributed under the same Licensing conditions.
ENUM_CLASSES = []
class ScriptMode(object):
TYPE = 'ScriptMode'
ENUM = ['SM_SOLUTION','SM_TIME','SM_STAT','SM_GIST']
ENUM_CLASSES.append(ScriptMode)
class RestartMode(object):
TYPE = 'RestartMode'
ENUM = ['RM_NONE','RM_CONSTANT','RM_LINEAR','RM_LUBY','RM_GEOMETRIC']
ENUM_CLASSES.append(RestartMode)
class FloatRelType(object):
TYPE = 'FloatRelType'
ENUM = ['FRT_EQ','FRT_NQ','FRT_LQ','FRT_LE','FRT_GQ','FRT_GR']
ENUM_CLASSES.append(FloatRelType)
class ReifyMode(object):
TYPE = 'ReifyMode'
ENUM = ['RM_EQV','RM_IMP','RM_PMI']
ENUM_CLASSES.append(ReifyMode)
class IntRelType(object):
TYPE = 'IntRelType'
ENUM = ['IRT_EQ','IRT_NQ','IRT_LQ','IRT_LE','IRT_GQ','IRT_GR']
ENUM_CLASSES.append(IntRelType)
class BoolOpType(object):
TYPE = 'BoolOpType'
ENUM = ['BOT_AND','BOT_OR','BOT_IMP','BOT_EQV','BOT_XOR']
ENUM_CLASSES.append(BoolOpType)
class IntConLevel(object):
TYPE = 'IntConLevel'
ENUM = ['ICL_VAL','ICL_BND','ICL_DOM','ICL_DEF']
ENUM_CLASSES.append(IntConLevel)
class TaskType(object):
TYPE = 'TaskType'
ENUM = ['TT_FIXP','TT_FIXS','TT_FIXE']
ENUM_CLASSES.append(TaskType)
class ExtensionalPropKind(object):
TYPE = 'ExtensionalPropKind'
ENUM = ['EPK_DEF','EPK_SPEED','EPK_MEMORY']
ENUM_CLASSES.append(ExtensionalPropKind)
class ViewSelStatus(object):
TYPE = 'ViewSelStatus'
ENUM = ['VSS_BEST','VSS_BETTER','VSS_TIE','VSS_WORSE']
ENUM_CLASSES.append(ViewSelStatus)
class ExecStatus(object):
TYPE = 'ExecStatus'
ENUM = ['__ES_SUBSUMED','ES_FAILED','ES_NOFIX','ES_OK','ES_FIX','ES_NOFIX_FORCE','__ES_PARTIAL']
ENUM_CLASSES.append(ExecStatus)
class ActorProperty(object):
TYPE = 'ActorProperty'
ENUM = ['AP_DISPOSE','AP_WEAKLY']
ENUM_CLASSES.append(ActorProperty)
class SpaceStatus(object):
TYPE = 'SpaceStatus'
ENUM = ['SS_FAILED','SS_SOLVED','SS_BRANCH']
ENUM_CLASSES.append(SpaceStatus)
class SetRelType(object):
TYPE = 'SetRelType'
ENUM = ['SRT_EQ','SRT_NQ','SRT_SUB','SRT_SUP','SRT_DISJ','SRT_CMPL','SRT_LQ','SRT_LE','SRT_GQ','SRT_GR']
ENUM_CLASSES.append(SetRelType)
class SetOpType(object):
TYPE = 'SetOpType'
ENUM = ['SOT_UNION','SOT_DUNION','SOT_INTER','SOT_MINUS']
ENUM_CLASSES.append(SetOpType)

View File

@ -0,0 +1,280 @@
// This file was automatically extracted from Gecode source files.
// It is subject to the same Copyright as the source files from which
// it is derived, and is distributed under the same Licensing conditions.
BrancherHandle assign(Home,BoolVar,IntAssign,BoolVarValPrint=NULL);
BrancherHandle assign(Home,const BoolVarArgs&,IntAssign,BoolBranchFilter=NULL,BoolVarValPrint=NULL);
BrancherHandle assign(Home,const FloatVarArgs&,FloatAssign,FloatBranchFilter=NULL,FloatVarValPrint=NULL);
BrancherHandle assign(Home,const IntVarArgs&,IntAssign,IntBranchFilter=NULL,IntVarValPrint=NULL);
BrancherHandle assign(Home,const SetVarArgs&,SetAssign,SetBranchFilter=NULL,SetVarValPrint=NULL);
BrancherHandle assign(Home,FloatVar,FloatAssign,FloatVarValPrint=NULL);
BrancherHandle assign(Home,IntVar,IntAssign,IntVarValPrint=NULL);
BrancherHandle assign(Home,SetVar,SetAssign,SetVarValPrint=NULL);
BrancherHandle branch(Home,BoolVar,IntValBranch,BoolVarValPrint=NULL);
BrancherHandle branch(Home,const BoolVarArgs&,IntVarBranch,IntValBranch,BoolBranchFilter=NULL,BoolVarValPrint=NULL);
BrancherHandle branch(Home,const BoolVarArgs&,IntVarBranch,IntValBranch,const Symmetries&,BoolBranchFilter=NULL,BoolVarValPrint=NULL);
BrancherHandle branch(Home,const BoolVarArgs&,TieBreak<IntVarBranch>,IntValBranch,BoolBranchFilter=NULL,BoolVarValPrint=NULL);
BrancherHandle branch(Home,const BoolVarArgs&,TieBreak<IntVarBranch>,IntValBranch,const Symmetries&,BoolBranchFilter=NULL,BoolVarValPrint=NULL);
BrancherHandle branch(Home,const FloatVarArgs&,FloatVarBranch,FloatValBranch,FloatBranchFilter=NULL,FloatVarValPrint=NULL);
BrancherHandle branch(Home,const FloatVarArgs&,TieBreak<FloatVarBranch>,FloatValBranch,FloatBranchFilter=NULL,FloatVarValPrint=NULL);
BrancherHandle branch(Home,const IntVarArgs&,IntVarBranch,IntValBranch,const Symmetries&,IntBranchFilter=NULL,IntVarValPrint=NULL);
BrancherHandle branch(Home,const IntVarArgs&,IntVarBranch,IntValBranch,IntBranchFilter=NULL,IntVarValPrint=NULL);
BrancherHandle branch(Home,const IntVarArgs&,TieBreak<IntVarBranch>,IntValBranch,const Symmetries&,IntBranchFilter=NULL,IntVarValPrint=NULL);
BrancherHandle branch(Home,const IntVarArgs&,TieBreak<IntVarBranch>,IntValBranch,IntBranchFilter=NULL,IntVarValPrint=NULL);
BrancherHandle branch(Home,const SetVarArgs&,SetVarBranch,SetValBranch,const Symmetries&,SetBranchFilter=NULL,SetVarValPrint=NULL);
BrancherHandle branch(Home,const SetVarArgs&,SetVarBranch,SetValBranch,SetBranchFilter=NULL,SetVarValPrint=NULL);
BrancherHandle branch(Home,const SetVarArgs&,TieBreak<SetVarBranch>,SetValBranch,const Symmetries&,SetBranchFilter=NULL,SetVarValPrint=NULL);
BrancherHandle branch(Home,const SetVarArgs&,TieBreak<SetVarBranch>,SetValBranch,SetBranchFilter=NULL,SetVarValPrint=NULL);
BrancherHandle branch(Home,FloatVar,FloatValBranch,FloatVarValPrint=NULL);
BrancherHandle branch(Home,IntVar,IntValBranch,IntVarValPrint=NULL);
BrancherHandle branch(Home,SetVar,SetValBranch,SetVarValPrint=NULL);
void abs(Home,FloatVar,FloatVar);
void abs(Home,IntVar,IntVar,IntConLevel=ICL_DEF);
void atmostOne(Home,const SetVarArgs&,unsigned int);
void binpacking(Home,const IntVarArgs&,const IntVarArgs&,const IntArgs&,IntConLevel=ICL_DEF);
void cardinality(Home,const SetVarArgs&,unsigned int,unsigned int);
void cardinality(Home,SetVar,IntVar);
void cardinality(Home,SetVar,unsigned int,unsigned int);
void channel(Home,BoolVar,IntVar,IntConLevel=ICL_DEF);
void channel(Home,const BoolVarArgs&,IntVar,int=0,IntConLevel=ICL_DEF);
void channel(Home,const BoolVarArgs&,SetVar);
void channel(Home,const IntVarArgs&,const IntVarArgs&,IntConLevel=ICL_DEF);
void channel(Home,const IntVarArgs&,const SetVarArgs&);
void channel(Home,const IntVarArgs&,int,const IntVarArgs&,int,IntConLevel=ICL_DEF);
void channel(Home,const SetVarArgs&,const SetVarArgs&);
void channel(Home,FloatVar,IntVar);
void channel(Home,IntVar,FloatVar);
void channelSorted(Home,const IntVarArgs&,SetVar);
void circuit(Home,const IntArgs&,const IntVarArgs&,const IntVarArgs&,IntVar,IntConLevel=ICL_DEF);
void circuit(Home,const IntArgs&,const IntVarArgs&,IntVar,IntConLevel=ICL_DEF);
void circuit(Home,const IntArgs&,int,const IntVarArgs&,const IntVarArgs&,IntVar,IntConLevel=ICL_DEF);
void circuit(Home,const IntArgs&,int,const IntVarArgs&,IntVar,IntConLevel=ICL_DEF);
void circuit(Home,const IntVarArgs&,IntConLevel=ICL_DEF);
void circuit(Home,int,const IntVarArgs&,IntConLevel=ICL_DEF);
void clause(Home,BoolOpType,const BoolVarArgs&,const BoolVarArgs&,BoolVar,IntConLevel=ICL_DEF);
void clause(Home,BoolOpType,const BoolVarArgs&,const BoolVarArgs&,int,IntConLevel=ICL_DEF);
void convex(Home,SetVar);
void convex(Home,SetVar,SetVar);
void count(Home,const IntVarArgs&,const IntArgs&,IntRelType,int,IntConLevel=ICL_DEF);
void count(Home,const IntVarArgs&,const IntArgs&,IntRelType,IntVar,IntConLevel=ICL_DEF);
void count(Home,const IntVarArgs&,const IntSetArgs&,const IntArgs&,IntConLevel=ICL_DEF);
void count(Home,const IntVarArgs&,const IntSetArgs&,IntConLevel=ICL_DEF);
void count(Home,const IntVarArgs&,const IntSet&,const IntArgs&,IntConLevel=ICL_DEF);
void count(Home,const IntVarArgs&,const IntSet&,IntRelType,int,IntConLevel=ICL_DEF);
void count(Home,const IntVarArgs&,const IntSet&,IntRelType,IntVar,IntConLevel=ICL_DEF);
void count(Home,const IntVarArgs&,const IntVarArgs&,const IntArgs&,IntConLevel=ICL_DEF);
void count(Home,const IntVarArgs&,const IntVarArgs&,IntConLevel=ICL_DEF);
void count(Home,const IntVarArgs&,int,IntRelType,int,IntConLevel=ICL_DEF);
void count(Home,const IntVarArgs&,int,IntRelType,IntVar,IntConLevel=ICL_DEF);
void count(Home,const IntVarArgs&,IntVar,IntRelType,int,IntConLevel=ICL_DEF);
void count(Home,const IntVarArgs&,IntVar,IntRelType,IntVar,IntConLevel=ICL_DEF);
void cumulative(Home,int,const IntVarArgs&,const IntArgs&,const IntArgs&,const BoolVarArgs&,IntConLevel=ICL_DEF);
void cumulative(Home,int,const IntVarArgs&,const IntArgs&,const IntArgs&,IntConLevel=ICL_DEF);
void cumulative(Home,int,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntArgs&,const BoolVarArgs&,IntConLevel=ICL_DEF);
void cumulative(Home,int,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntArgs&,IntConLevel=ICL_DEF);
void cumulative(Home,int,const TaskTypeArgs&,const IntVarArgs&,const IntArgs&,const IntArgs&,const BoolVarArgs&,IntConLevel=ICL_DEF);
void cumulative(Home,int,const TaskTypeArgs&,const IntVarArgs&,const IntArgs&,const IntArgs&,IntConLevel=ICL_DEF);
void cumulative(Home,IntVar,const IntVarArgs&,const IntArgs&,const IntArgs&,const BoolVarArgs&,IntConLevel=ICL_DEF);
void cumulative(Home,IntVar,const IntVarArgs&,const IntArgs&,const IntArgs&,IntConLevel=ICL_DEF);
void cumulative(Home,IntVar,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntArgs&,const BoolVarArgs&,IntConLevel=ICL_DEF);
void cumulative(Home,IntVar,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntArgs&,IntConLevel=ICL_DEF);
void cumulative(Home,IntVar,const TaskTypeArgs&,const IntVarArgs&,const IntArgs&,const IntArgs&,const BoolVarArgs&,IntConLevel=ICL_DEF);
void cumulative(Home,IntVar,const TaskTypeArgs&,const IntVarArgs&,const IntArgs&,const IntArgs&,IntConLevel=ICL_DEF);
void cumulatives(Home,const IntArgs&,const IntVarArgs&,const IntArgs&,const IntVarArgs&,const IntArgs&,const IntArgs&,bool,IntConLevel=ICL_DEF);
void cumulatives(Home,const IntArgs&,const IntVarArgs&,const IntArgs&,const IntVarArgs&,const IntVarArgs&,const IntArgs&,bool,IntConLevel=ICL_DEF);
void cumulatives(Home,const IntArgs&,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntArgs&,const IntArgs&,bool,IntConLevel=ICL_DEF);
void cumulatives(Home,const IntArgs&,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntArgs&,bool,IntConLevel=ICL_DEF);
void cumulatives(Home,const IntVarArgs&,const IntVarArgs&,const IntArgs&,const IntVarArgs&,const IntArgs&,const IntArgs&,bool,IntConLevel=ICL_DEF);
void cumulatives(Home,const IntVarArgs&,const IntVarArgs&,const IntArgs&,const IntVarArgs&,const IntVarArgs&,const IntArgs&,bool,IntConLevel=ICL_DEF);
void cumulatives(Home,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntArgs&,const IntArgs&,bool,IntConLevel=ICL_DEF);
void cumulatives(Home,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntArgs&,bool,IntConLevel=ICL_DEF);
void distinct(Home,const IntArgs&,const IntVarArgs&,IntConLevel=ICL_DEF);
void distinct(Home,const IntVarArgs&,IntConLevel=ICL_DEF);
void div(Home,FloatVar,FloatVar,FloatVar);
void div(Home,IntVar,IntVar,IntVar,IntConLevel=ICL_DEF);
void divmod(Home,IntVar,IntVar,IntVar,IntVar,IntConLevel=ICL_DEF);
void dom(Home,BoolVar,BoolVar,IntConLevel=ICL_DEF);
void dom(Home,const BoolVarArgs&,const BoolVarArgs&,IntConLevel=ICL_DEF);
void dom(Home,const FloatVarArgs&,const FloatVarArgs&);
void dom(Home,const FloatVarArgs&,FloatNum,FloatNum);
void dom(Home,const FloatVarArgs&,FloatVal);
void dom(Home,const IntVarArgs&,const IntSet&,IntConLevel=ICL_DEF);
void dom(Home,const IntVarArgs&,const IntVarArgs&,IntConLevel=ICL_DEF);
void dom(Home,const IntVarArgs&,int,IntConLevel=ICL_DEF);
void dom(Home,const IntVarArgs&,int,int,IntConLevel=ICL_DEF);
void dom(Home,const SetVarArgs&,const SetVarArgs&);
void dom(Home,const SetVarArgs&,SetRelType,const IntSet&);
void dom(Home,const SetVarArgs&,SetRelType,int);
void dom(Home,const SetVarArgs&,SetRelType,int,int);
void dom(Home,FloatVar,FloatNum,FloatNum);
void dom(Home,FloatVar,FloatNum,FloatNum,Reify);
void dom(Home,FloatVar,FloatVal);
void dom(Home,FloatVar,FloatVal,Reify);
void dom(Home,FloatVar,FloatVar);
void dom(Home,IntVar,const IntSet&,IntConLevel=ICL_DEF);
void dom(Home,IntVar,const IntSet&,Reify,IntConLevel=ICL_DEF);
void dom(Home,IntVar,int,IntConLevel=ICL_DEF);
void dom(Home,IntVar,int,int,IntConLevel=ICL_DEF);
void dom(Home,IntVar,int,int,Reify,IntConLevel=ICL_DEF);
void dom(Home,IntVar,int,Reify,IntConLevel=ICL_DEF);
void dom(Home,IntVar,IntVar,IntConLevel=ICL_DEF);
void dom(Home,SetVar,SetRelType,const IntSet&);
void dom(Home,SetVar,SetRelType,const IntSet&,Reify);
void dom(Home,SetVar,SetRelType,int);
void dom(Home,SetVar,SetRelType,int,int);
void dom(Home,SetVar,SetRelType,int,int,Reify);
void dom(Home,SetVar,SetRelType,int,Reify);
void dom(Home,SetVar,SetVar);
void element(Home,const BoolVarArgs&,IntVar,BoolVar,IntConLevel=ICL_DEF);
void element(Home,const BoolVarArgs&,IntVar,int,IntConLevel=ICL_DEF);
void element(Home,const BoolVarArgs&,IntVar,int,IntVar,int,BoolVar,IntConLevel=ICL_DEF);
void element(Home,const IntSetArgs&,IntVar,int,IntVar,int,SetVar);
void element(Home,const IntSetArgs&,IntVar,SetVar);
void element(Home,const IntVarArgs&,IntVar,int,IntConLevel=ICL_DEF);
void element(Home,const IntVarArgs&,IntVar,int,IntVar,int,IntVar,IntConLevel=ICL_DEF);
void element(Home,const IntVarArgs&,IntVar,IntVar,IntConLevel=ICL_DEF);
void element(Home,const SetVarArgs&,IntVar,int,IntVar,int,SetVar);
void element(Home,const SetVarArgs&,IntVar,SetVar);
void element(Home,IntSharedArray,IntVar,BoolVar,IntConLevel=ICL_DEF);
void element(Home,IntSharedArray,IntVar,int,IntConLevel=ICL_DEF);
void element(Home,IntSharedArray,IntVar,int,IntVar,int,BoolVar,IntConLevel=ICL_DEF);
void element(Home,IntSharedArray,IntVar,int,IntVar,int,IntVar,IntConLevel=ICL_DEF);
void element(Home,IntSharedArray,IntVar,IntVar,IntConLevel=ICL_DEF);
void element(Home,SetOpType,const IntArgs&,SetVar,SetVar,const IntSet&=IntSet(Set::Limits::min,Set::Limits::max));
void element(Home,SetOpType,const IntSetArgs&,SetVar,SetVar,const IntSet&=IntSet(Set::Limits::min,Set::Limits::max));
void element(Home,SetOpType,const IntVarArgs&,SetVar,SetVar,const IntSet&=IntSet(Set::Limits::min,Set::Limits::max));
void element(Home,SetOpType,const SetVarArgs&,SetVar,SetVar,const IntSet&=IntSet(Set::Limits::min,Set::Limits::max));
void extensional(Home,const BoolVarArgs&,const TupleSet&,ExtensionalPropKind=EPK_DEF,IntConLevel=ICL_DEF);
void extensional(Home,const BoolVarArgs&,DFA,IntConLevel=ICL_DEF);
void extensional(Home,const IntVarArgs&,const TupleSet&,ExtensionalPropKind=EPK_DEF,IntConLevel=ICL_DEF);
void extensional(Home,const IntVarArgs&,DFA,IntConLevel=ICL_DEF);
void ite(Home,BoolVar,IntVar,IntVar,IntVar,IntConLevel=ICL_DEF);
void linear(Home,const BoolVarArgs&,IntRelType,int,IntConLevel=ICL_DEF);
void linear(Home,const BoolVarArgs&,IntRelType,int,Reify,IntConLevel=ICL_DEF);
void linear(Home,const BoolVarArgs&,IntRelType,IntVar,IntConLevel=ICL_DEF);
void linear(Home,const BoolVarArgs&,IntRelType,IntVar,Reify,IntConLevel=ICL_DEF);
void linear(Home,const FloatValArgs&,const FloatVarArgs&,FloatRelType,FloatNum);
void linear(Home,const FloatValArgs&,const FloatVarArgs&,FloatRelType,FloatNum,Reify);
void linear(Home,const FloatValArgs&,const FloatVarArgs&,FloatRelType,FloatVar);
void linear(Home,const FloatValArgs&,const FloatVarArgs&,FloatRelType,FloatVar,Reify);
void linear(Home,const FloatVarArgs&,FloatRelType,FloatNum);
void linear(Home,const FloatVarArgs&,FloatRelType,FloatNum,Reify);
void linear(Home,const FloatVarArgs&,FloatRelType,FloatVar);
void linear(Home,const FloatVarArgs&,FloatRelType,FloatVar,Reify);
void linear(Home,const IntArgs&,const BoolVarArgs&,IntRelType,int,IntConLevel=ICL_DEF);
void linear(Home,const IntArgs&,const BoolVarArgs&,IntRelType,int,Reify,IntConLevel=ICL_DEF);
void linear(Home,const IntArgs&,const BoolVarArgs&,IntRelType,IntVar,IntConLevel=ICL_DEF);
void linear(Home,const IntArgs&,const BoolVarArgs&,IntRelType,IntVar,Reify,IntConLevel=ICL_DEF);
void linear(Home,const IntArgs&,const IntVarArgs&,IntRelType,int,IntConLevel=ICL_DEF);
void linear(Home,const IntArgs&,const IntVarArgs&,IntRelType,int,Reify,IntConLevel=ICL_DEF);
void linear(Home,const IntArgs&,const IntVarArgs&,IntRelType,IntVar,IntConLevel=ICL_DEF);
void linear(Home,const IntArgs&,const IntVarArgs&,IntRelType,IntVar,Reify,IntConLevel=ICL_DEF);
void linear(Home,const IntVarArgs&,IntRelType,int,IntConLevel=ICL_DEF);
void linear(Home,const IntVarArgs&,IntRelType,int,Reify,IntConLevel=ICL_DEF);
void linear(Home,const IntVarArgs&,IntRelType,IntVar,IntConLevel=ICL_DEF);
void linear(Home,const IntVarArgs&,IntRelType,IntVar,Reify,IntConLevel=ICL_DEF);
void max(Home,const FloatVarArgs&,FloatVar);
void max(Home,const IntVarArgs&,IntVar,IntConLevel=ICL_DEF);
void max(Home,FloatVar,FloatVar,FloatVar);
void max(Home,IntVar,IntVar,IntVar,IntConLevel=ICL_DEF);
void max(Home,SetVar,IntVar);
void max(Home,SetVar,IntVar,Reify);
void member(Home,const BoolVarArgs&,BoolVar,IntConLevel=ICL_DEF);
void member(Home,const BoolVarArgs&,BoolVar,Reify,IntConLevel=ICL_DEF);
void member(Home,const IntVarArgs&,IntVar,IntConLevel=ICL_DEF);
void member(Home,const IntVarArgs&,IntVar,Reify,IntConLevel=ICL_DEF);
void min(Home,const FloatVarArgs&,FloatVar);
void min(Home,const IntVarArgs&,IntVar,IntConLevel=ICL_DEF);
void min(Home,FloatVar,FloatVar,FloatVar);
void min(Home,IntVar,IntVar,IntVar,IntConLevel=ICL_DEF);
void min(Home,SetVar,IntVar);
void min(Home,SetVar,IntVar,Reify);
void mod(Home,IntVar,IntVar,IntVar,IntConLevel=ICL_DEF);
void mult(Home,FloatVar,FloatVar,FloatVar);
void mult(Home,IntVar,IntVar,IntVar,IntConLevel=ICL_DEF);
void nooverlap(Home,const IntVarArgs&,const IntArgs&,const IntVarArgs&,const IntArgs&,const BoolVarArgs&,IntConLevel=ICL_DEF);
void nooverlap(Home,const IntVarArgs&,const IntArgs&,const IntVarArgs&,const IntArgs&,IntConLevel=ICL_DEF);
void nooverlap(Home,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const BoolVarArgs&,IntConLevel=ICL_DEF);
void nooverlap(Home,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,IntConLevel=ICL_DEF);
void notMax(Home,SetVar,IntVar);
void notMin(Home,SetVar,IntVar);
void nroot(Home,FloatVar,int,FloatVar);
void nroot(Home,IntVar,int,IntVar,IntConLevel=ICL_DEF);
void nvalues(Home,const BoolVarArgs&,IntRelType,int,IntConLevel=ICL_DEF);
void nvalues(Home,const BoolVarArgs&,IntRelType,IntVar,IntConLevel=ICL_DEF);
void nvalues(Home,const IntVarArgs&,IntRelType,int,IntConLevel=ICL_DEF);
void nvalues(Home,const IntVarArgs&,IntRelType,IntVar,IntConLevel=ICL_DEF);
void path(Home,const IntArgs&,const IntVarArgs&,IntVar,IntVar,const IntVarArgs&,IntVar,IntConLevel=ICL_DEF);
void path(Home,const IntArgs&,const IntVarArgs&,IntVar,IntVar,IntVar,IntConLevel=ICL_DEF);
void path(Home,const IntArgs&,int,const IntVarArgs&,IntVar,IntVar,const IntVarArgs&,IntVar,IntConLevel=ICL_DEF);
void path(Home,const IntArgs&,int,const IntVarArgs&,IntVar,IntVar,IntVar,IntConLevel=ICL_DEF);
void path(Home,const IntVarArgs&,IntVar,IntVar,IntConLevel=ICL_DEF);
void path(Home,int,const IntVarArgs&,IntVar,IntVar,IntConLevel=ICL_DEF);
void pow(Home,FloatVar,int,FloatVar);
void pow(Home,IntVar,int,IntVar,IntConLevel=ICL_DEF);
void precede(Home,const IntVarArgs&,const IntArgs&,IntConLevel=ICL_DEF);
void precede(Home,const IntVarArgs&,int,int,IntConLevel=ICL_DEF);
void precede(Home,const SetVarArgs&,const IntArgs&);
void precede(Home,const SetVarArgs&,int,int);
void rel(Home,BoolOpType,const BoolVarArgs&,BoolVar,IntConLevel=ICL_DEF);
void rel(Home,BoolOpType,const BoolVarArgs&,int,IntConLevel=ICL_DEF);
void rel(Home,BoolVar,BoolOpType,BoolVar,BoolVar,IntConLevel=ICL_DEF);
void rel(Home,BoolVar,BoolOpType,BoolVar,int,IntConLevel=ICL_DEF);
void rel(Home,BoolVar,IntRelType,BoolVar,IntConLevel=ICL_DEF);
void rel(Home,BoolVar,IntRelType,BoolVar,Reify,IntConLevel=ICL_DEF);
void rel(Home,BoolVar,IntRelType,int,IntConLevel=ICL_DEF);
void rel(Home,BoolVar,IntRelType,int,Reify,IntConLevel=ICL_DEF);
void rel(Home,const BoolVarArgs&,IntRelType,BoolVar,IntConLevel=ICL_DEF);
void rel(Home,const BoolVarArgs&,IntRelType,const BoolVarArgs&,IntConLevel=ICL_DEF);
void rel(Home,const BoolVarArgs&,IntRelType,IntConLevel=ICL_DEF);
void rel(Home,const BoolVarArgs&,IntRelType,int,IntConLevel=ICL_DEF);
void rel(Home,const FloatVarArgs&,FloatRelType,FloatVal);
void rel(Home,const FloatVarArgs&,FloatRelType,FloatVar);
void rel(Home,const IntSet&,SetOpType,SetVar,SetRelType,const IntSet&);
void rel(Home,const IntSet&,SetOpType,SetVar,SetRelType,SetVar);
void rel(Home,const IntVarArgs&,IntRelType,const IntVarArgs&,IntConLevel=ICL_DEF);
void rel(Home,const IntVarArgs&,IntRelType,IntConLevel=ICL_DEF);
void rel(Home,const IntVarArgs&,IntRelType,int,IntConLevel=ICL_DEF);
void rel(Home,const IntVarArgs&,IntRelType,IntVar,IntConLevel=ICL_DEF);
void rel(Home,FloatVar,FloatRelType,FloatVal);
void rel(Home,FloatVar,FloatRelType,FloatVal,Reify);
void rel(Home,FloatVar,FloatRelType,FloatVar);
void rel(Home,FloatVar,FloatRelType,FloatVar,Reify);
void rel(Home,IntVar,IntRelType,int,IntConLevel=ICL_DEF);
void rel(Home,IntVar,IntRelType,int,Reify,IntConLevel=ICL_DEF);
void rel(Home,IntVar,IntRelType,IntVar,IntConLevel=ICL_DEF);
void rel(Home,IntVar,IntRelType,IntVar,Reify,IntConLevel=ICL_DEF);
void rel(Home,IntVar,IntRelType,SetVar);
void rel(Home,IntVar,SetRelType,SetVar);
void rel(Home,IntVar,SetRelType,SetVar,Reify);
void rel(Home,SetOpType,const IntVarArgs&,const IntSet&,SetVar);
void rel(Home,SetOpType,const IntVarArgs&,SetVar);
void rel(Home,SetOpType,const SetVarArgs&,const IntSet&,SetVar);
void rel(Home,SetOpType,const SetVarArgs&,SetVar);
void rel(Home,SetVar,IntRelType,IntVar);
void rel(Home,SetVar,SetOpType,const IntSet&,SetRelType,const IntSet&);
void rel(Home,SetVar,SetOpType,const IntSet&,SetRelType,SetVar);
void rel(Home,SetVar,SetOpType,SetVar,SetRelType,const IntSet&);
void rel(Home,SetVar,SetOpType,SetVar,SetRelType,SetVar);
void rel(Home,SetVar,SetRelType,IntVar);
void rel(Home,SetVar,SetRelType,IntVar,Reify);
void rel(Home,SetVar,SetRelType,SetVar);
void rel(Home,SetVar,SetRelType,SetVar,Reify);
void sequence(Home,const BoolVarArgs&,const IntSet&,int,int,int,IntConLevel=ICL_DEF);
void sequence(Home,const IntVarArgs&,const IntSet&,int,int,int,IntConLevel=ICL_DEF);
void sequence(Home,const SetVarArgs&);
void sequence(Home,const SetVarArgs&,SetVar);
void sorted(Home,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,IntConLevel=ICL_DEF);
void sorted(Home,const IntVarArgs&,const IntVarArgs&,IntConLevel=ICL_DEF);
void sqr(Home,FloatVar,FloatVar);
void sqr(Home,IntVar,IntVar,IntConLevel=ICL_DEF);
void sqrt(Home,FloatVar,FloatVar);
void sqrt(Home,IntVar,IntVar,IntConLevel=ICL_DEF);
void unary(Home,const IntVarArgs&,const IntArgs&,const BoolVarArgs&,IntConLevel=ICL_DEF);
void unary(Home,const IntVarArgs&,const IntArgs&,IntConLevel=ICL_DEF);
void unary(Home,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,const BoolVarArgs&,IntConLevel=ICL_DEF);
void unary(Home,const IntVarArgs&,const IntVarArgs&,const IntVarArgs&,IntConLevel=ICL_DEF);
void unary(Home,const TaskTypeArgs&,const IntVarArgs&,const IntArgs&,const BoolVarArgs&,IntConLevel=ICL_DEF);
void unary(Home,const TaskTypeArgs&,const IntVarArgs&,const IntArgs&,IntConLevel=ICL_DEF);
void unshare(Home,BoolVarArgs&,IntConLevel=ICL_DEF);
void unshare(Home,IntVarArgs&,IntConLevel=ICL_DEF);
void weights(Home,IntSharedArray,IntSharedArray,SetVar,IntVar);

View File

@ -16,7 +16,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//=============================================================================
#include "gecode-common.icc"
#include "gecode3-common.icc"
#include <iostream>
using namespace std;
using namespace generic_gecode;

View File

@ -168,6 +168,18 @@ extern "C"
return * (SetAssign*) YAP_OpaqueObjectFromTerm(t);
}
static inline TupleSet&
gecode_TupleSet_from_term(YAP_Term t)
{
return *(TupleSet *) YAP_OpaqueObjectFromTerm(t);
}
static inline DFA&
gecode_DFA_from_term(YAP_Term t)
{
return *(DFA *) YAP_OpaqueObjectFromTerm(t);
}
static inline FloatNum
gecode_FloatNum_from_term(YAP_Term t)
{
@ -1569,6 +1581,111 @@ extern "C"
return YAP_Unify(YAP_ARG4, term);
}
static YAP_opaque_tag_t gecode_tupleset_tag;
static YAP_opaque_handler_t gecode_tupleset_handler;
static int gecode_tupleset_fail_handler(void* p)
{
return TRUE;
}
static int
gecode_tupleset_write_handler
(void *stream_, YAP_opaque_tag_t type, void *p, int flags)
{
IOSTREAM* stream = (IOSTREAM*) stream_;
Sfprintf(stream,"<tupleset %p>", p);
return TRUE;
}
static int gecode_new_tupleset(void)
{
YAP_Term term =
YAP_NewOpaqueObject(gecode_tupleset_tag, sizeof(TupleSet));
TupleSet *ts = new (YAP_OpaqueObjectFromTerm(term)) TupleSet;
YAP_Term t = YAP_ARG1;
while (YAP_IsPairTerm( t ) ) {
YAP_Term l = YAP_HeadOfTerm(t);
int n = gecode_list_length(l);
int i = 0;
IntArgs is(n);
while (YAP_IsPairTerm( l ) ) {
YAP_Term ll = YAP_HeadOfTerm(l);
if (!YAP_IsIntTerm(ll)) {
cerr << "non-integer on tuple set" << endl; exit(1);
}
is[i++] = YAP_IntOfTerm(ll);
l = YAP_TailOfTerm(l);
}
ts->add(is);
if (l != YAP_TermNil()) {
cerr << "non-list on tuple set" << endl; exit(1);
}
t = YAP_TailOfTerm(t);
}
if (t != YAP_TermNil()) {
cerr << "non-list on tuple set" << endl; exit(1);
}
ts->finalize();
return YAP_Unify(YAP_ARG2, term);
}
static YAP_opaque_tag_t gecode_dfa_tag;
static YAP_opaque_handler_t gecode_dfa_handler;
static int gecode_dfa_fail_handler(void* p)
{
return TRUE;
}
static int
gecode_dfa_write_handler
(void *stream_, YAP_opaque_tag_t type, void *p, int flags)
{
IOSTREAM* stream = (IOSTREAM*) stream_;
Sfprintf(stream,"<dfa %p>", p);
return TRUE;
}
static int gecode_new_dfa(void)
{
YAP_Term term =
YAP_NewOpaqueObject(gecode_dfa_tag, sizeof(DFA));
// DFA ts = new (YAP_OpaqueObjectFromTerm(term)) DFA;
YAP_Term t2 = YAP_ARG2;
int s0 = YAP_IntOfTerm(t2);
YAP_Term t3 = YAP_ARG3;
int n = gecode_list_length(t3), i=0;
DFA::Transition t[n];
while (YAP_IsPairTerm( t3 ) ) {
YAP_Term tt = YAP_HeadOfTerm(t3);
int is, sy, os;
is = YAP_IntOfTerm(YAP_ArgOfTerm(1,tt));
sy = YAP_IntOfTerm(YAP_ArgOfTerm(2,tt));
os = YAP_IntOfTerm(YAP_ArgOfTerm(3,tt));
t[i++] = DFA::Transition(is, sy, os);
t3 = YAP_TailOfTerm(t3);
}
if (t3 != YAP_TermNil()) {
cerr << "non-list on DFA" << endl; exit(1);
}
YAP_Term t4 = YAP_ARG4;
n = gecode_list_length(t4)+1;
i=0;
int s[n];
s[n-1] = -1;
while (YAP_IsPairTerm( t4 ) ) {
YAP_Term tt = YAP_HeadOfTerm(t4);
s[i++] = YAP_IntOfTerm(tt);
t4 = YAP_TailOfTerm(t4);
}
if (t4 != YAP_TermNil()) {
cerr << "non-list on DFA" << endl; exit(1);
}
new (YAP_OpaqueObjectFromTerm(term)) DFA(s0, t, s);
return YAP_Unify(YAP_ARG1, term);
}
void gecode_init(void)
{
{ YAP_Atom X= YAP_LookupAtom("true");
@ -1758,6 +1875,16 @@ extern "C"
gecode_reify_handler.write_handler = gecode_reify_write_handler;
gecode_reify_tag = YAP_NewOpaqueType(&gecode_reify_handler);
YAP_UserCPredicate("gecode_new_reify", gecode_new_reify, 4);
// Opaque TupleSet
gecode_tupleset_handler.fail_handler = gecode_tupleset_fail_handler;
gecode_tupleset_handler.write_handler = gecode_tupleset_write_handler;
gecode_tupleset_tag = YAP_NewOpaqueType(&gecode_tupleset_handler);
YAP_UserCPredicate("gecode_new_tupleset", gecode_new_tupleset, 2);
// Opaque DFA
gecode_dfa_handler.fail_handler = gecode_dfa_fail_handler;
gecode_dfa_handler.write_handler = gecode_dfa_write_handler;
gecode_dfa_tag = YAP_NewOpaqueType(&gecode_dfa_handler);
YAP_UserCPredicate("gecode_new_dfa", gecode_new_dfa, 4);
#ifdef DISJUNCTOR
// opaque disjunctors and clauses
gecode_disjunctor_handler.write_handler = gecode_disjunctor_write_handler;

View File

@ -118,6 +118,14 @@ is_IntSetArgs_([H|T],[H2|T2]) :- is_IntSet(H,H2), is_IntSetArgs(T,T2).
is_IntSetArgs(X,Y) :- nonvar(X), is_IntSetArgs_(X,Y).
is_IntSetArgs(X) :- \+ \+ is_IntSetArgs(X,_).
is_TupleSet_('TupleSet'(TS),TS).
is_TupleSet(X,Y) :- nonvar(X), is_TupleSet_(X,Y).
is_TupleSet(X) :- is_TupleSet(X,_).
is_DFA_('DFA'(TS),TS).
is_DFA(X,Y) :- nonvar(X), is_DFA_(X,Y).
is_DFA(X) :- is_DFA(X,_).
new_intset(X,I,J) :- intset(X,I,J).
new_intset(X,L) :- intset(X,L).
@ -150,6 +158,10 @@ assert_is_Space(X,Y) :-
is_Space(X,Y) -> true ; throw(gecode_error(expected(space))).
assert_is_IntSet(X,Y) :-
is_IntSet(X,Y) -> true ; throw(gecode_error(expected(intset))).
assert_is_TupleSet(X,Y) :-
is_TupleSet(X,Y) -> true ; throw(gecode_error(expected(tupleset))).
assert_is_DFA(X,Y) :-
is_DFA(X,Y) -> true ; throw(gecode_error(expected(dfa))).
assert_is_IntVar(X,Y) :-
is_IntVar(X,Y) -> true ; throw(gecode_error(expected(intvar))).
assert_is_BoolVar(X,Y) :-
@ -540,6 +552,15 @@ new_setvar(SVar,Space,X1,X2) :-
gecode_new_setvar_12(Idx,Space_,X1_,X2_),
SVar='SetVar'(Idx,-1).
new_tupleset( TupleSet, List ) :-
gecode_new_tupleset(List, TupleSet_),
TupleSet = 'TupleSet'(TupleSet_).
new_dfa( DFA, S0, List, Finals ) :-
gecode_new_dfa(DFA_, S0, List, Finals),
DFA = 'DFA'(DFA_).
minimize(Space,IVar) :-
assert_is_Space(Space,Space_),
assert_is_IntVar(IVar,IVar_),
@ -926,6 +947,8 @@ keep_list_(_, X) :-
(X := setvars(Space,N,X1,X2,X3,X4)) :- !, new_setvars_(X,Space,N,X1,X2,X3,X4).
(X := setvars(Space,N,X1,X2,X3)) :- !, new_setvars_(X,Space,N,X1,X2,X3).
(X := setvars(Space,N,X1,X2)) :- !, new_setvars_(X,Space,N,X1,X2).
(X := tupleset(Set)) :- !, new_tupleset(X, Set).
(X := dfa(S0, Transitions, Finals)) :- !, new_dfa(X, S0, Transitions, Finals).
(X := min(Space,Var)) :- !, get_min(X,Space,Var).
(X := max(Space,Var)) :- !, get_max(X,Space,Var).
@ -1013,7 +1036,8 @@ keep_list_(_, X) :-
(Space += element(X1,X2,X3,X4,X5)) :- !, element(Space,X1,X2,X3,X4,X5).
(Space += element(X1,X2,X3,X4,X5,X6)) :- !, element(Space,X1,X2,X3,X4,X5,X6).
(Space += element(X1,X2,X3,X4,X5,X6,X7)) :- !, element(Space,X1,X2,X3,X4,X5,X6,X7).
(Space += linear(X1,X2,X3)) :- !, linear(Space,X1,X2,X3).
(Space += extensional(X1,X2)) :- !, extensional(Space,X1,X2).
(Space += extensional(X1,X2,X3)) :- !, extensional(Space,X1,X2,X3).
(Space += linear(X1,X2,X3,X4)) :- !, linear(Space,X1,X2,X3,X4).
(Space += linear(X1,X2,X3,X4,X5)) :- !, linear(Space,X1,X2,X3,X4,X5).
(Space += linear(X1,X2,X3,X4,X5,X6)) :- !, linear(Space,X1,X2,X3,X4,X5,X6).

View File

@ -387,6 +387,8 @@ F Dot6 Dot 6
F Dot7 Dot 7
F Dot8 Dot 8
F Dot9 Dot 9
F EmptySquareBrackets EmptySquareBrackets 2
F EmptyCurlyBrackets EmptyCurlyBrackets 2
F Eq Eq 2
F Error Error 2
F EvaluationError EvaluationError 1

View File

@ -37,6 +37,8 @@ load_files(Files,Opts) :-
'$process_lf_opts'(Opts,Silent,InfLevel,Expand,Changed,CompilationMode,Imports,Stream,Encoding,SkipUnixComments,CompMode,Reconsult,Files,Call),
'$check_use_module'(Call,UseModule),
'$current_module'(M0),
% make sure we can run consult
'$init_system',
'$lf'(Files,M0,Call,InfLevel,Expand,Changed,CompilationMode,Imports,Stream,Encoding,SkipUnixComments,CompMode,Reconsult,UseModule),
'$close_lf'(Silent).