mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-18 02:43:40 +00:00
104 lines
1.5 KiB
Mathematica
104 lines
1.5 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- module det_errors_cc.
|
|
|
|
:- interface.
|
|
|
|
:- pred p(int::in, int::out) is cc_nondet.
|
|
|
|
:- implementation.
|
|
:- import_module int.
|
|
|
|
:- type t
|
|
---> fa
|
|
; fb
|
|
; fc
|
|
; fd.
|
|
|
|
p(A, X) :-
|
|
p1(A, B),
|
|
p2(B, C),
|
|
p3(C, D),
|
|
p4(D, E),
|
|
p5(E, F),
|
|
p6(F, X).
|
|
|
|
:- pred p1(int::in, int::out) is cc_nondet.
|
|
|
|
p1(A, X) :-
|
|
p3(A, B),
|
|
p4(B, C),
|
|
C = 10,
|
|
B = C,
|
|
X = C.
|
|
|
|
:- pred p2(int::in, int::out) is cc_nondet.
|
|
|
|
p2(A, X) :-
|
|
p3(A, B),
|
|
( if B < 5 then
|
|
fail
|
|
else
|
|
X = B
|
|
).
|
|
|
|
:- pred p3(int::in, int::out) is cc_nondet.
|
|
|
|
p3(A, X) :-
|
|
p2(A, X),
|
|
not (X = 10).
|
|
|
|
:- pred p4(int::in, int::out) is cc_nondet.
|
|
|
|
p4(A, X) :-
|
|
p3(A, B),
|
|
P = r(B),
|
|
P(A, X).
|
|
|
|
:- pred p5(int::in, int::out) is cc_nondet.
|
|
|
|
p5(A, X) :-
|
|
p1(A, B),
|
|
( if B < 5 then
|
|
C = fa
|
|
else if B < 10 then
|
|
C = fb
|
|
else
|
|
C = fc
|
|
),
|
|
(
|
|
C = fa,
|
|
X = 5
|
|
;
|
|
C = fb,
|
|
X = 6
|
|
).
|
|
|
|
:- pred p6(int::in, int::out) is cc_nondet.
|
|
|
|
p6(A, X) :-
|
|
p1(A, B),
|
|
( if B < 5 then
|
|
C = fa
|
|
else
|
|
C = fb
|
|
),
|
|
(
|
|
C = fa,
|
|
X = 5
|
|
;
|
|
C = fb,
|
|
X = 6
|
|
).
|
|
|
|
:- pred q(int::in, int::out) is multi.
|
|
|
|
q(N, N).
|
|
q(N, N + 1).
|
|
|
|
:- pred r(int::in, int::in, int::out) is semidet.
|
|
|
|
r(N, N, N).
|