%---------------------------------------------------------------------------% % vim: ts=4 sw=4 et ft=mercury %---------------------------------------------------------------------------% % % Some versions of the compiler get the solution context wrong: they think % that since the call to p2 and its check unification are inside a cut, % the call to p1 ought to be inside a cut as well. :- module soln_context. :- interface. :- pred q is semidet. :- implementation. q :- p1(X, Y), p2(X, Y). :- pred p1(int, int). :- mode p1(free >> free, out) is nondet. :- pragma no_inline(p1/2). p1(_, 42) :- semidet_fail. :- pred p2(int, int). :- mode p2(out, in) is nondet. :- pragma no_inline(p2/2). p2(X, X) :- semidet_true. p2(X, X) :- semidet_true.